使用 Dns.GetHostEntry() 的 C# 返回另一个国家的 IP 地址 [重复]

Posted

技术标签:

【中文标题】使用 Dns.GetHostEntry() 的 C# 返回另一个国家的 IP 地址 [重复]【英文标题】:C# using Dns.GetHostEntry() returns an IP address in another country [duplicate] 【发布时间】:2013-11-24 12:51:54 【问题描述】:

编辑:看起来这段代码只返回内部 IP。有没有办法使用 C# 找到我的外部 IP?

所以我一直在使用“标准”方法来获取您自己的 IP 地址:

IPAddress Own;
IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)

    if (ip.AddressFamily == AddressFamily.InterNetwork)
    
        Own = ip;
    

问题是这给我的地址在英国某个地方,而我在澳大利亚 - 显然,当我向谷歌询问我自己的 IP 地址时,我得到的东西与这段代码给我的不同。

那么为什么这段代码不起作用?在我看来,使用 DNS 服务器来解析我自己的主机名(这不是 URL,它只是一个计算机名......)有点奇怪,但我相信这是正确的方法。可能出了什么问题?

【问题讨论】:

我的猜测是您获得了您的内部 IP 地址,并且它与英国的外部地址相同。 这段代码运行后你能识别出'Own'包含的IP吗?它是私有IP还是公共IP? www.whatismyip.com 说什么?您如何确定地址“在”另一个国家/地区?你到底想用这段代码做什么? 好吧,事实证明它正在返回一个内部 IP,但它是 hamatchi 内部 IP,这是一个英国外部 IP。在这种情况下,是否可以使用 C# 获取外部 IP? 这里已经回答了:***.com/a/2353177 【参考方案1】:

您的系统有静态 IP 地址吗?一般我们使用动态 IP(作为 DHCP 客户端)或办公室的本地 IP 地址。

Google 可以显示您的 ISP 的 IP 地址,而不是本地系统;如果您没有使用静态 IP 地址。

您可以为您的本地系统使用任何 IP,它可能属于您所在国家或国外的多个本地网络。

您的代码看起来非常好,它向您显示了本地 IP 地址。请确认网络配置。

【讨论】:

以上是关于使用 Dns.GetHostEntry() 的 C# 返回另一个国家的 IP 地址 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Dns.GetHostAddress和Dns.GetHostEntry都只返回ipv4地址。我如何获得ipv4和ipv6地址?

获取电脑的网络连接状态IPHost

获取电脑的网络连接状态IPHost

获取本机IP地址

获取本机IP

使用 C# 获取 IPv4