0

我正在编写一个 Windows 桌面应用程序,它通过无线网络 (WLAN) 与我的 DSLR 相机进行通信。我需要一种扫描网络并通过其 MAC 地址或其他识别信息找到相机的方法。Nirsoft Wireless Network Watcher 显示有关我网络上每个设备的信息。(具体来说:“IP 地址”、“设备名称”、“MAC 地址”、“网络适配器公司”等).NET 是否提供了从 C# 检索此信息的方法?

4

1 回答 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 回答