使用“目录条目”在本地网络上获取 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 中需要它。
如果您已经有了主机名,那么您几乎完成了。
您可以
- 使用 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;