使用“目录条目”在本地网络上获取 IPA地址

本文关键字:本地网络 获取 IPA 地址 目录条目 使用 | 更新日期: 2023-09-27 18:34:22

我必须开发一个桌面应用程序,它允许我在本地网络上共享文件。为此,我能够获得设备主机名的listview,但是当知道它们的IP地址和MAC时,我去看了System.net和其他几个MSDN论坛(其中的帮助可用于地铁应用程序)。

如何获取本地网络上所有设备的IP地址和MAC地址?

我正在使用DirectoryEntry来获取用户名并以listview显示。

   lstLocal.Items.Clear();
        lstLocal.View = View.Details;
        lstLocal.FullRowSelect = true;
        DirectoryEntry root = new DirectoryEntry("WinNT:");
        foreach (DirectoryEntry computers in root.Children)
        {
            foreach (DirectoryEntry computer in computers.Children)
            {
                if (computer.Name != "Schema")
                {
                    ListViewItem item = new ListViewItem(computer.Name);
                   // item.SubItems.Add(computer.Name);
                    //MessageBox.Show(computer.Name);
                    lstLocal.Items.Add(item);
                }
            }
        }

更新:我用了

                     var hostname = Dns.GetHostName();
                    var ipadd = Dns.GetHostAddresses(hostname);

但地址在返回的 IPV6 中。我在 IPV4 中需要它。

使用“目录条目”在本地网络上获取 IPA地址

如果您已经有了主机名,那么您几乎完成了。

您可以

  • 使用 DNS 将主机名解析为 IP 地址,以及
  • 使用 ARP 将 IP 地址解析为 MAC 地址。

你可以试试这个:

对于 IP 地址:

var hostname = Dns.GetHostName();
var ipadd = Dns.GetHostAddresses(hostname); //array will contain ipv4 and ipv6

对于 MAC 地址:

    public string GetMACAddress()
    {
        NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
        String sMacAddress = string.Empty;
        foreach (NetworkInterface adapter in nics)
        {
            if (sMacAddress == String.Empty)// only return MAC Address from first card  
            {
                IPInterfaceProperties properties = adapter.GetIPProperties();
                sMacAddress = adapter.GetPhysicalAddress().ToString();
            }
        } return sMacAddress;
    }

MAC 地址的参考:

MAC地址

有内置的类来查找IP/Mac地址。请查看此链接。

片段取自上面:

System.Net.IPAddress[] TempAd = Tempaddr.AddressList;
                foreach(IPAddress TempA in TempAd)
                {
                    Ipaddr[1] = TempA.ToString();
                    byte[] ab = new byte[6];
                    int len = ab.Length;
                    // This Function Used to Get The Physical Address
                    int r = SendARP( (int) TempA.Address, 0, ab, ref len );
                    string mac = BitConverter.ToString( ab, 0, 6 );
                    Ipaddr[2] = mac;
                }           

使用 WMI mac 地址可以检测到"机器"是您的计算机名称。在项目中添加对系统管理的引用

ManagementScope scope = new ManagementScope();
var options = new ConnectionOptions();
options.Authentication = AuthenticationLevel.Default;
options.Impersonation = ImpersonationLevel.Impersonate;
options.EnablePrivileges = true;
scope = new ManagementScope(@"''" + machine + "''root''CIMV2", options);
scope.Connect();
SelectQuery query = new SelectQuery("Select * FROM Win32_NetworkAdapterConfiguration");
ManagementObjectSearcher objMOS = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection objMOC = objMOS.Get();
string macAddress = String.Empty;
foreach (ManagementObject objMO in objMOC) {
    object tempMacAddrObj = objMO["MacAddress"];
    if (tempMacAddrObj == null) {
        continue;
    }
    if (macAddress == String.Empty) {
        macAddress = tempMacAddrObj.ToString();
    }
    objMO.Dispose();
}
return macAddress;