我正在写一个Windows桌面应用程序,通过无线网络(WLAN)与我的数码单反相机通信。我需要一种方法来扫描网络,并找到相机的MAC地址或其他识别信息。Nirsoft无线网络监视器显示有关我的网络上的每个设备的信息。(具体来说:"IP地址"、"设备名称"、"MAC地址"、"网络适配器公司"等). net是否提供了一种从c#中检索这些信息的方法?
您可以查看下面的博客,其中有人已经编写了类似的代码。https://www.maniuk.net/2016/08/get-ip-address-by-mac-address-in-csharp.html
使用命令行arp命令作为外部进程。我已经测试过了,似乎工作得很好。按照代码,mac地址的格式必须是aa-bb-cc-dd-ee-ff
或者,有一个Nuget包叫做arlookup。https://www.nuget.org/packages/ArpLookup/
使用这个,你必须提供IP地址,它将返回mac地址。因此,您必须枚举您的IP范围,并返回与mac地址匹配的IP。
像这样:
private static async Task<string> GetIPFromMAC(string macAddress)
{
var ping = new Ping();
var start = BitConverter.ToInt32(new byte[] { 1, 0, 168, 192 }, 0);
var end = BitConverter.ToInt32(new byte[] { 254, 0, 168, 192 }, 0);
for (var i = start; i <= end; i++)
{
var bytes = BitConverter.GetBytes(i);
var ipAddress = new IPAddress(new[] {bytes[3], bytes[2], bytes[1], bytes[0]});
var reply = ping.Send(ipAddress, 200);
if (reply == null || reply.Status == IPStatus.TimedOut) continue;
var mac = await Arp.LookupAsync(ipAddress);
if (macAddress == mac.ToString()) return ipAddress.ToString();
}
return string.Empty;
}
您需要将start和end中的值替换为您的IP范围,然后您可以像这样调用代码。
var ip = GetIPFromMAC("aabbccddeeff").Result;