通过IPv6获取远程MAC地址
嘿伙计们,我在网上寻找解决方案,但我一无所获! ?
是否可以通过IPv6(没有WMI)从同一网络中的另一台PC获取MAC? 使用IPv4很容易(ARP)。 IPv6使用“邻居发现协议”(NDP)来获取MAC地址。 .Net中有没有这方面的方法?
有什么建议? 谢谢你的帮助!
问候
法比安
您可以运行外部命令“netsh int ipv6 show neigh”,并过滤掉您感兴趣的主机。您应该在此之前联系它,因此您知道它在NC中。
如果您需要API,请使用GetIpNetTable2,或者更直接地使用ResolveIpNetEntry2 。 我怀疑有一个.NET API,所以你必须使用PInvoke。
Martin的答案是针对Windows的,但如果你使用的是GNU / Linux或其他* nix盒子,那就是这个问题。
您想使用ip
命令的neigh
函数来显示IPv6邻居,如下所示:
$ ip -6 neigh fe80::200:ff:fe00:0 dev eth0 lladdr 00:0e:54:24:23:21 router REACHABLE fe80::202:b0ff:fe01:2abe dev eth0 lladdr 00:02:b0:02:2a:be DELAY
(专业提示:您可以保持-6
关闭并在同一列表中查看IPv4 ARP和IPv6 ND。)
此外,如果要查找LAN上所有 IPv6计算机的MAC地址,而不仅仅是您已经了解的那些,则应先ping它们,然后查找邻居:
$ ping6 ff02::1%eth0 64 bytes from fe80::221:84ff:fe42:86ef: icmp_seq=1 ttl=64 time=0.053 ms # <-- you 64 bytes from fe80::200:ff:fe00:0: icmp_seq=1 ttl=64 time=2.37 ms (DUP!) 64 bytes from fe80::202:b0ff:fe01:2abe: icmp_seq=1 ttl=64 time=2.38 ms (DUP!) 64 bytes from fe80::215:abff:fe63:f6fa: icmp_seq=1 ttl=64 time=2.66 ms (DUP!) $ ip -6 neigh fe80::200:ff:fe00:0 dev eth0 lladdr 00:0e:54:24:23:21 router REACHABLE fe80::202:b0ff:fe01:2abe dev eth0 lladdr 00:02:b0:02:2a:be DELAY fe80::215:abff:fe63:f6fa dev eth0 lladdr 00:02:15:ab:f6:fa DELAY # <-- a new one!
如果线解析代码得到改进,@ Alex的答案会更好。 这是一种方式:
public static string netsh(String IPv6) { IPAddress wanted; if (!IPAddress.TryParse(IPv6, out wanted)) throw new ArgumentException("Can't parse as an IPAddress", "IPv6"); Regex re = new Regex("^([0-9A-F]S+)s+(S+)s+(S+)", RegexOptions.IgnoreCase); // ... the code that runs netsh and gathers the output. Match m = re.Match(output); if (m.Success) { // [0] is the entire line // [1] is the IP Address string // [2] is the MAC Address string // [3] is the status (Permanent, Stale, ...) // IPAddress found; if (IPAddress.TryParse(m.Groups[1].Value, out found)) { if(wanted.Equals(found)) { return m.Groups[2].Value; } } } // ... the code that finishes the loop on netsh output and returns failure }
这是我的代码:
上述就是C#学习教程:通过IPv6获取远程MAC地址分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
public static string netsh(String IPv6) { Process p = new Process(); p.StartInfo.FileName = "netsh.exe"; String command = "int ipv6 show neigh"; Console.WriteLine(command); p.StartInfo.Arguments = command; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.Start(); String output = "go"; while (output!=null){ try { output = p.StandardOutput.ReadLine(); } catch (Exception) { output = null; } if (output.Contains(IPv6)) { // Nimmt die Zeile in der sich die IPv6 Addresse und die MAC Addresse des Clients befindet // Löscht den IPv6 Eintrag, entfernt alle Leerzeichen und kürzt den String auf 17 Zeichen, So erschein die MacAddresse im Format "33-33-ff-0d-57-00" output = output.Replace(IPv6, "").Replace(" ", "").TrimToMaxLength(17) ; return output; } } return null; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1019715.html