如何在c#winforms中以Internet点分整数格式获取网络IP地址

时间:2013-06-29 12:49:07

标签: c# ip-address ipv6

我正在尝试将网络IP地址恢复为http://checkip.dyndns.org/

但是我从下面的代码中得到了这个结果。

  

FE80 :: 28d3:b8e8:CAAB:63b3%10

我希望在互联网点整数格式lilke 122.168.149.143

中使用ip地址
foreach (IPAddress ipa in Dns.GetHostAddresses(Dns.GetHostName()))
{
    if (ipa.AddressFamily == AddressFamily.InterNetwork)
    {
        textBox2.Text = ipa.ToString();
        break;
    }
}

2 个答案:

答案 0 :(得分:3)

当您要通过IPv4地址过滤时,您当前正在按IPv6地址过滤!这就是IPAddress.ToString()以冒号十六进制表示法返回IP的原因。

要按IPv4地址过滤,您需要根据AddressFamily.InterNetwork进行过滤:

if (ipa.AddressFamily == AddressFamily.InterNetwork)
{ }

我理解您想获得您的公开演讲。您列出的代码将返回您的私人(本地)地址!

Windows操作系统不关心您的公共IP。操作系统只是路由到定义的网关,不担心细节。解决公共IP的唯一方法是查询某些外部系统。 您需要外部帮助。

获取公共地址的最可靠方法是连接到外部Web服务器,该服务器可以以纯文本形式解析和输出您的公共地址。 You already listed a suitable service with your question。您甚至可以通过自己提供服务来承担服务责任。用于实现此is very simple

的PHP代码

如果您的路由器支持UPnP(或SNMP),您可以查询路由器,但这可能不起作用。这可能足以满足您的机器需求,但有些路由器不支持UPnP,安全意识的用户可能因安全漏洞而禁用UPnP。 See this SO question for a managed UpNp library.

我已经读过您可以使用tracert到已建立的网站(您知道将在线的网站),第一个“跳”将是您的路线。我从未尝试过这个。

答案 1 :(得分:1)

点整数格式只能用于IP ver。 4个地址。

在代码示例中,您甚至只显式选择IP ver。 6个地址。

使用AddressFamily.InterNetwork代替AddressFamily.InterNetworkV6选择IPv4地址,然后ToString将按照您期望的方式对其进行格式化。