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