using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace Xxxxx
{
public class LibArp
{
//引入windowsAPI
//用于转换ip地址
[DllImport("ws2_32.dll")]
public static extern int inet_addr(string cp);
//用于发送APR包(根据APR协议!)
[DllImport("IPHLPAPI.dll")]
public static extern int SendARP(int DestIP, int ScrIP, ref long pMacAddr, ref int PhyAddrLen);
}
public class Arp
{
public int ExtractMAC(string IP,ref string destMac)
{
StringBuilder MacRouteBuilder = new StringBuilder();
int flag = 0;
try
{
int ldest = LibArp.inet_addr(IP); //将IP地址从 点数格式转换成无符号长整型
long macinfo = new long();
int len = 6;
//SendARP函数发送一个地址解析协议(ARP)请求获得指定的目的地IPv4地址相对应的物理地址
int ret = LibArp.SendARP(ldest, 0, ref macinfo, ref len);
if(ret == 0)
{
string TmpMac = Convert.ToString(macinfo, 16).PadLeft(12, '0');//转换成16进制
//
for (int i = 10; i >= 0; i = i - 2)//反过来读取,原因可以查看接口函数sendApr!
{
MacRouteBuilder.Append(TmpMac.Substring(i, 2).ToUpper());
if (i >= 2)
{
MacRouteBuilder.Append("-");
}
}
flag = 1;
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
if(flag == 1)
{
destMac = MacRouteBuilder.ToString();
return 0;
}
return -1;
}
}
}
C# 33. 通过IP地址获取MAC(有超时重发机制)
最新推荐文章于 2023-04-28 13:21:56 发布
本文介绍了一个使用C#编写的库Arp,通过DllImport导入Windows API中的inet_addr和SendARP函数,实现IP地址到物理地址的转换,并在Arp类中详细展示了如何提取MAC地址。
摘要由CSDN通过智能技术生成