我正在编写一个 Windows 桌面应用程序,它通过无线网络 (WLAN) 与我的 DSLR 相机进行通信。我需要一种扫描网络并通过其 MAC 地址或其他识别信息找到相机的方法。Nirsoft Wireless Network Watcher 显示有关我网络上每个设备的信息。(具体来说:“IP 地址”、“设备名称”、“MAC 地址”、“网络适配器公司”等).NET 是否提供了从 C# 检索此信息的方法?
问问题
233 次
1 回答
1
您可以查看以下博客,其中有人已经为此编写了代码。 https://www.maniuk.net/2016/08/get-ip-address-by-mac-address-in-csharp.html
这使用命令行 arp 命令作为外部进程。我已经测试过了,似乎工作正常。正如代码所示,mac 地址必须采用 aa-bb-cc-dd-ee-ff 格式
或者,有一个名为 ArpLookup 的 Nuget 包。 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;
于 2021-01-15T23:15:24.363 回答