c# - 如何仅 Ping IPv4?

标签 c# .net ping ipv4 traceroute

我知道我的路由器的 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 SourceGitHub),如果参数传递给Send()那么是一个名字 Dns.GetHostAddresses()用于解决它,返回的第一个地址是使用的地址。因此,如果第一个地址是 IPv6 地址,那么该地址就是将被 ping 的地址,并且无法更改该行为。

相反,您可以调用 Dns.GetHostAddresses()您自己,过滤结果以包含或首选 IPv4 地址,然后将 that 传递给 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...
}

关于c# - 如何仅 Ping IPv4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55461884/

相关文章:

c# - 如何使用 C# 中的 QBO API v3 将付款应用于发票?

c# - 如何解析 xml 并读取其值

c# - bundle 的 css 链接出现 404 错误

r - 在 R 中 Ping 一个网站

c++ - 服务器应用程序必须向 N 个客户端发出 ping 命令。有没有办法让它多线程?

c# - 使用非 VB6 对象在 VS2008 中调试 VB6

c# - .NET MAUI 将列表绑定(bind)到上下文 View

java - 以编程方式从第三方站点发送邮件

.net - 如何获取属性覆盖属性?

c# - 什么是快速测试多个盒子 ping 的最佳方法