如何在c#winforms中获取互联网点整数格式的网络ip地址
本文关键字:格式 整数 网络 地址 ip 互联网 c#winforms 获取 | 更新日期: 2023-09-27 18:20:18
我正在尝试将网络IP地址获取为http://checkip.dyndns.org/退货。
但是我从下面的代码中得到了这个结果。
fe80::28d3:b8e8:caab:63b3%10
我想要互联网点整数格式的ip地址lilke 122.168.149.143
foreach (IPAddress ipa in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (ipa.AddressFamily == AddressFamily.InterNetwork)
{
textBox2.Text = ipa.ToString();
break;
}
}
您当前正在按IPv6地址进行筛选,而您打算按IPv4地址进行筛选!这就是IPAddress.ToString()以冒号十六进制表示法返回IP的原因。
要按IPv4地址进行筛选,您需要根据AddressFamily.InterNetwork进行筛选:
if (ipa.AddressFamily == AddressFamily.InterNetwork)
{ }
据我所知,你想获得你的公共地址。您列出的代码将返回您的私人(本地)地址!
Windows操作系统不关心您的公共IP。操作系统只需路由到定义的网关,而不必担心细节。解析公共IP的唯一方法是查询一些外部系统你需要外部帮助
获取公共地址最可靠的方法是连接到外部web服务器,该服务器可以解析并以纯文本输出您的公共地址。您已经在问题中列出了合适的服务。您甚至可以通过自己提供服务来承担服务的责任。实现这一点的PHP代码非常简单。
如果你的路由器支持UPnP(或SNMP),你可以查询你的路由器,但这可能不起作用。这对你的机器来说可能已经足够了,但有些路由器不支持UPnP,有安全意识的用户很可能因为安全漏洞而禁用了UPnP。有关托管UpNp库,请参阅此SO问题。
我读到过,你可以使用tracert访问一个已建立的网站(你知道这个网站会在线),第一个"跳跃"将指向你的路线。我从来没有试过这个。
点整数格式只能用于IP版本4的地址。
在代码示例中,您甚至显式地只选择IP版本6的地址。
使用AddressFamily.InterNetwork
而不是AddressFamily.InterNetworkV6
来选择IPv4地址,然后ToString
将按照您期望的方式对其进行格式化。