【发布时间】:2013-02-27 18:58:59
【问题描述】:
有什么方法可以获取对应特定 MAC 地址的 IP(或主机名)?
到目前为止,我发现使用System.Net.Dns 从 IP 获取主机名,反之亦然。
【问题讨论】:
标签: c# ip-address mac-address
有什么方法可以获取对应特定 MAC 地址的 IP(或主机名)?
到目前为止,我发现使用System.Net.Dns 从 IP 获取主机名,反之亦然。
【问题讨论】:
标签: c# ip-address mac-address
你可以使用这个类
public class IPMacMapper
{
private static List<IPAndMac> list;
private static StreamReader ExecuteCommandLine(String file, String arguments = "")
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.FileName = file;
startInfo.Arguments = arguments;
Process process = Process.Start(startInfo);
return process.StandardOutput;
}
private static void InitializeGetIPsAndMac()
{
if (list != null)
return;
var arpStream = ExecuteCommandLine("arp", "-a");
List<string> result = new List<string>();
while (!arpStream.EndOfStream)
{
var line = arpStream.ReadLine().Trim();
result.Add(line);
}
list = result.Where(x => !string.IsNullOrEmpty(x) && (x.Contains("dynamic") || x.Contains("static")))
.Select(x =>
{
string[] parts = x.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
return new IPAndMac { IP = parts[0].Trim(), MAC = parts[1].Trim() };
}).ToList();
}
public static string FindIPFromMacAddress(string macAddress)
{
InitializeGetIPsAndMac();
IPAndMac item = list.SingleOrDefault(x => x.MAC == macAddress);
if (item == null)
return null;
return item.IP;
}
public static string FindMacFromIPAddress(string ip)
{
InitializeGetIPsAndMac();
IPAndMac item = list.SingleOrDefault(x => x.IP == ip);
if (item == null)
return null;
return item.MAC;
}
private class IPAndMac
{
public string IP { get; set; }
public string MAC { get; set; }
}
}
并将其用作
string ipAddress = IPMacMapper.FindIPFromMacAddress("some-mac-address");
string macAddress = IPMacMapper.FindMacFromIPAddress("some-ip-address");
【讨论】:
您正在寻找的是阅读计算机的ARP 列表。
然后解析它以找到请求的MAC地址...
请注意,arp -a 同时具有 IP 和 MAC,因此您只需匹配请求的。
Here is an example 如何在 C# 中完成
【讨论】: