编程语言
首页 > 编程语言> > 首页> C#>如何仅ping通IPv4?

首页> C#>如何仅ping通IPv4?

作者:互联网

我知道路由器的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...
}

标签:ipv4,ping,traceroute,c,net
来源: https://codeday.me/bug/20191108/2005927.html