获取网站的外部IP地址

4
我看过很多获取机器或网站内部IP地址的简便方法,但是我似乎找不到一个好的方法来获取外部IP地址。
澄清一下,如果我提供像bitbucket.org这样的URL,则希望获得bitbucket的外部IP地址。是否有可以轻松实现此操作的Web服务?
编辑:假设在此情况下,我与bitbucket.org处于同一网络中。
我们正在为公司管理的所有网站填写数据库信息。我们希望跟踪信息并注意定期更改,并记录特定数据。该程序将部署在与运行网站的服务器位于同一网络的本地服务器上。我认为检索每个站点的外部IP地址的唯一好方法是使用外部Web服务。

你已经写了哪些代码来实现这个功能? - Brian
2
如果你不在 Bitbucket 的网络上,你只会得到外部地址,有什么区别吗? - Rup
@Rup,在这种情况下,假设我和 BitBucket 在同一个网络上。 - Wesley Porter
@Brian 我已经尝试了在互联网上找到的所有可能的建议,但它们就像我在上面的帖子中描述的那样。 - Wesley Porter
@icemanind - 也许... 我已经考虑过了。感谢您抽出时间调查 :-) - Wesley Porter
显示剩余3条评论
5个回答

7

抱歉,Alex,这与在同一网络上获取内部IP地址相同。 - Wesley Porter
这并不是必须的,但如果您正在使用内部DNS服务器或者您的路由器正在进行DNS修复,可能会给您提供错误的IP地址。您真正需要的是一个代表您进行DNS查询的网络服务,但我不知道是否有这样的服务存在。 - Yaur

3

您可以查询外部公共DNS服务器,例如Google的8.8.8.8。从命令行执行。

nslookup bitbucket.org 8.8.8.8

在Windows命令提示符下输入nslookup bitbucket.org,或在Linux下输入dig bitbucket.org @8.8.8.8来查询DNS信息。目前有一些C#库可以让你查询指定的DNS服务器,例如 DnsNet,它是基于这篇CodeProject文章构建的(我没有尝试过,不能保证其性能)。但这种方法依赖于Google继续提供服务,不过目前看来这个可能性很大。


2
你可以使用ping工具。在Windows中,按下Windows键+r打开命令窗口,然后输入以下命令:
ping bitbucket.org

我相信推荐的答案(使用System.Dns.GetHostEntry())归根结底是相同的原理,但步骤更少。 - nicbou
两个答案都是错误的,没有解决问题。这只会在同一网络上返回内部IP地址。 - Wesley Porter

0

我认为你可以直接使用Dns.GetHostAddresses来获取IP地址。根据MSDN文档:

GetHostAddresses方法查询DNS服务器以获取与主机名关联的IP地址。

更新:

如果你正在寻找一个Web服务,可以尝试查看whoisxmpapi.com。正如你从this sample中所看到的,他们在XML输出中提供了名称服务器IP地址。然后,你可以使用类似于this的东西直接从名称服务器获取IP地址!


这与上面所有答案相同,而且在同一网络中是不正确的。这种方法永远无法保证返回外部IP地址。 - Wesley Porter
@WesleyPorter - 你是说如果你在与 bitbucket.org 相同的网络上,你想知道如何获取与你所在网络相同的外部地址? - Icemanind
是的!这就是我的问题陈述 :-). 我将不得不使用一些外部网络服务或类似的东西。 - Wesley Porter
很抱歉听起来像个吹毛求疵的人...我想我只是因为搜索了太多而感到沮丧。我已经在使用whoisxmlapi.com获取其他数据。然而,他们并不总是提供IP地址;因此,我的搜索仍在继续。我也找到了kloth.net,但它不是我可以在项目中调用的Web服务。 - Wesley Porter
@WesleyPorter - 你觉得Whois-RWS怎么样?我不知道它是否免费,如果这是一个要求的话。 - Icemanind

-1
如果您想获取“wan” IP而不是本地IP,可以尝试以下代码。您还可以在Web服务中添加此类代码,并将其添加到PC Bitbucket上(如果它确实在您的网络上并且您可以访问安装Web服务)。
Public Shared ReadOnly Property IpAddress() As String
        Get
            If String.IsNullOrWhiteSpace(_ipAddress) Then
                Try
                    Dim webClient As New WebClient
                    Dim result As String = webClient.DownloadString("http://checkip.dyndns.org")

                    Dim fields = result.Split(" ")
                    _ipAddress = fields.Last
                    _ipAddress = _ipAddress.Replace("</body></html>", "")
                Catch ex As Exception
                    _ipAddress = "errorFindingIp"
                End Try
            End If
            Return _ipAddress
        End Get
    End Property

谢谢你的尝试。我已经尝试过那种方法了。你只能获取你正在使用的机器的IP地址,但是网站可以驻留在同一网络中的不同服务器上。这个解决方案也无效 :-(。 - Wesley Porter
我建议您在机器上添加一个名为“获取公共IP地址”的Web服务方法,然后将我展示的代码添加到Web服务中。这样调用它将会获取到公共IP地址,无论您是否在同一网络中。 - DermFrench
本地网络服务也会有相同的问题。 - Wesley Porter
代码将要发送给外部客户端: Dim result As String = webClient.DownloadString("http://checkip.dyndns.org") 如果您知道您在同一个网络上,此代码将正常工作。因为服务器的广域网IP将与访问相同网络上的互联网的机器的广域网IP相同。如果这是安装在服务器机器上更好。 - DermFrench
是的,但这个程序并不是从每个站点单独运行的。它是从一个单一的位置运行的。有多个服务器托管网站,所以这是行不通的。 - Wesley Porter
如果它们都在同一个网络上,那么这些服务器肯定会有相同的WAN IP地址和不同的本地IP地址,正如你的问题所暗示的那样。 - DermFrench

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接