获取我的WAN IP地址

时间:2008-10-07 06:48:54

标签: web-services ip wan

我如何从互联网上看programaticaly获取我的网络的IP地址?它显然是我的路由器连接到ISP时可以访问的属性。有没有办法从使用标准协议的路由器获取此信息。我唯一的另一个选择是找到一个返回我的IP地址的WS(令人惊讶的难以做到),或者只是去找whatismyip.com之类的东西并删除所有的HTML(非常脏和易于更改)。有没有其他方法???

4 个答案:

答案 0 :(得分:8)

请勿抓取whatismyip.com,请参阅here,了解如何调用仅返回地址的API。

如果你不使用它,你必须自己写一些类似的东西,即路由器之外的主机,它可以报告你的明显地址。

请注意,网络服务器可能看不到您的真实WAN IP地址,因为:

  • 您的ISP可能是透明的 代理HTTP流量,服务器会看到IP的IP 代理。在那种情况下,你通常会 需要寻找和解析一个 X-Forwarded-For标题。

  • 或者,正如Olaf所说,您和广泛开放的互联网之间可能还有另一个NAT路由器,换句话说,您的路由器的WAN地址位于专用网络上。从whatismyip.com这样的服务中获得的最好的是最外层NAT路由器的IP。

答案 1 :(得分:2)

如果您的路由器支持snmp,您可以使用它来询问它的外部IP。这里有一个小例子:

http://www.rohitab.com/discuss/index.php?showtopic=31901

答案 2 :(得分:2)

我已经投票通过了Paul Dixons的回答,因为它看似完整,但还有一个方面:

  • 您的ISP可能会为您提供私人地址 - 某些ISP会发生 。根据您的预期,您可能需要一个没有路由的可路由地址
  • 如果您自己拥有代理,Paul提到的代理信息(HTTP-Header X-Forwarded-For)可能是不可路由的地址
  • 基于混合所有这些方面(从您的ISP获取不可路由的地址并自己拥有代理),您可能会得到奇怪的结果。

这些方面不是典型的日常情况,但根据您的需要,您可能需要考虑这些因素。

答案 3 :(得分:1)

我没有看到语言规范,但是我在python中做到了这一点:Finding a public facing IP address in Python?基本上没有办法在不依赖外部服务器的情况下这样做,在这种情况下我使用{{ 3}}只提供IP地址。 或者你可以使用自己的PHP脚本:

<?php
echo $_SERVER['REMOTE_ADDR'];
?>