我正在尝试将网络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;
}
}
答案 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
将按照您期望的方式对其进行格式化。