isp*_*iro 6 .net c# ping traceroute ipv4
我知道我的路由器的 IPv4 地址。但是当我使用 TTL = 1 进行 Ping 时,我没有得到该 IP。相反,我得到了它的 IPv6 地址。(我知道address.MapToIPv4(),但这仅适用于已更改为 IPv6 的 IPv4。)
那么如何仅 ping IPv4(如Tracert 的 /4 开关)?
var reply = new Ping().Send("example.com", 10000, new byte[] { 1 }, new PingOptions(1, true));
Run Code Online (Sandbox Code Playgroud)
查看源码(参考源码,GitHub),如果传递给的参数Send()是一个名字那么Dns.GetHostAddresses()用于解析它,并且返回的第一个地址就是所使用的地址。因此,如果第一个地址是 IPv6 地址,则将对该地址执行 ping 操作,并且无法更改该行为。
相反,您可以调用Dns.GetHostAddresses()自己,过滤结果以包含或首选 IPv4 地址,然后将其传递给Ping.Send():
IPAddress addressToPing = Dns.GetHostAddresses("example.com")
.First(address => address.AddressFamily == AddressFamily.InterNetwork);
using (Ping ping = new Ping())
{
PingReply reply = ping.Send(addressToPing, 10000, new byte[] { 1 }, new PingOptions(1, true));
// Do something with reply...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2545 次 |
| 最近记录: |