当前位置:  开发笔记 > 编程语言 > 正文

如何使用C#获取IP地址的物理(MAC)地址?

如何解决《如何使用C#获取IP地址的物理(MAC)地址?》经验,为你挑选了1个好方法。

从C#开始,我想做相同的以下内容:

arp -a |findstr 192.168.1.254

或者,答案可以调用SendARP函数并获得结果.

这将允许我的应用程序执行一些需要MAC地址的其他处理.



1> jop..:

SendARP P/Invoke是这样的:

[DllImport("iphlpapi.dll", ExactSpelling=true)]
public static extern int SendARP( int destIp, int srcIP, byte[] macAddr, ref uint physicalAddrLen );

PInvoke.NET有这个例子:

IPAddress dst = IPAddress.Parse("192.168.2.1"); // the destination IP address

byte[] macAddr = new byte[6];
uint macAddrLen = (uint)macAddr.Length;

if (SendARP(BitConverter.ToInt32(dst.GetAddressBytes(), 0), 0, macAddr, ref macAddrLen) != 0)
     throw new InvalidOperationException("SendARP failed.");

string[] str = new string[(int)macAddrLen];
for (int i=0; i


我在使用Wireshark在Windows XP上测试时发现的这个答案需要了解的事项:1)如果IP/MAC地址对已经在ARP缓存中,则ARP请求数据包将不会在网络上发送,但SendARP仍然会返回它在缓存中的(可能是陈旧的)macAddress.2)如果仅使用单个线程,则此方法可能非常慢.使用单个线程循环遍历整个IP地址子网(例如192.168.1.x)需要250+秒(每个IP地址1秒).对于所有250多个地址,使其大规模多线程花费不到一秒钟.
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有