如何在c#winforms中获取internet点整数格式的网络ip地址

如何在c#winforms中获取internet点整数格式的网络ip地址,c#,ip-address,ipv6,C#,Ip Address,Ipv6,我正在尝试获取网络IP地址作为返回 但是我从下面的代码中得到了这个结果 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) { textBox

我正在尝试获取网络IP地址作为返回

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

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;
    }
}

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

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


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

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

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


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

您当前正在按IPv6地址筛选,而您打算按IPv4地址进行筛选!这就是为什么IPAddress.ToString()以冒号十六进制表示法返回IP

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

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

据我所知,您希望获得公共广播。您列出的代码将返回您的私人(本地)地址

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

获取公共地址最可靠的方法是连接到外部web服务器,该服务器可以解析并以纯文本形式输出公共地址。您甚至可以通过自己提供服务来承担服务的责任。实现这一点的PHP代码

如果您的路由器支持UPnP(或SNMP),您可以查询您的路由器,但这可能不起作用。这对于您的机器可能就足够了,但是一些路由器不支持UPnP,并且出于安全考虑的用户可能已经由于安全漏洞禁用了UPnP


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

当您打算按IPv4地址进行筛选时,您当前正在按IPv6地址进行筛选!这就是为什么IPAddress.ToString()以冒号十六进制表示法返回IP

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

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

据我所知,您希望获得公共广播。您列出的代码将返回您的私人(本地)地址

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

获取公共地址最可靠的方法是连接到外部web服务器,该服务器可以解析并以纯文本形式输出公共地址。您甚至可以通过自己提供服务来承担服务的责任。实现这一点的PHP代码

如果您的路由器支持UPnP(或SNMP),您可以查询您的路由器,但这可能不起作用。这对于您的机器可能就足够了,但是一些路由器不支持UPnP,并且出于安全考虑的用户可能已经由于安全漏洞禁用了UPnP


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

我已经按照你的建议修改了我的程序,但它返回了我的本地ip。“192.168.1.4”实际上也是您的本地IP。要从中获取地址,您必须通过HTTP从中读取(例如使用System.Net.WebClient)。我想知道他们在该链接中做了什么,我自己是否无法获取wan地址?我已按照您的建议更正了我的程序,但它返回了我的本地ip。“192.168.1.4”实际上也是您的本地IP。要从中获取地址,您必须通过HTTP从中读取地址(例如使用System.Net.WebClient)。我想知道他们在该链接中做了什么,我自己不可能获取wan地址吗?在C#winform应用程序中没有任何解决方法来获取wan地址,为什么我应该在s/w中使用第三个链接,因为我对该链接没有权限,任何时候该网页都可能不可用。我们可能不喜欢依赖它。@HaiderAliWajihi我不确定这是唯一的方法,但我认为这是最有利于生产的方法。我认为在没有外部web服务器的情况下获取公共IP需要更多的代码,并且可能依赖于某些硬件。我更新了我的帖子,加入了一个PHP脚本,你可以上传到你自己的web服务器上,这样你就可以负责这项服务。thnx宝贵的时间,它帮了我很多。不过我还是直接在C#winform中寻找这个解决方法,而不依赖任何外部url/网页/链接+1对于你的答案,你的努力和知识是可以接受的。@HaiderAliWajihi我更新了我的答案,为你指出了两种替代方法的方向。我还解释了为什么您需要外部服务(可能不是服务器)。在C#winform应用程序中没有任何解决办法来获取wan地址,为什么我应该在s/w中使用第三个链接,因为我对该链接没有权限,任何时候该网页都可能不可用。我们可能不喜欢依赖它。@HaiderAliWajihi我不确定这是唯一的方法,但我认为这是最有利于生产的方法。我认为在没有外部web服务器的情况下获得公共IP