我知道路由器的IPv4地址。但是,当我使用TTL = 1 Ping时,我没有得到该IP。相反,我得到了它的IPv6地址。 (我知道address.MapToIPv4()
,但这仅适用于已更改为IPv6的IPv4。)
那我如何仅对IPv4进行ping操作(如tracert's /4 switch)?
var reply = new Ping().Send("example.com", 10000, new byte[] { 1 }, new PingOptions(1, true));
答案 0 :(得分:3)
查看源代码(Reference Source,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...
}