【问题标题】:Get my WAN IP address获取我的 WAN IP 地址
【发布时间】:2010-09-15 16:46:59
【问题描述】:

如何以编程方式获取从 Internet 看到的网络 IP 地址?它显然是我的路由器在连接到 ISP 时可以访问的属性。有没有办法使用标准协议从路由器获取此信息。我唯一的其他选择是找到一个返回我的 IP 地址的 WS(非常难以做到),或者只是去像 whatismyip.com 这样的东西并去掉所有的 HTML(非常脏并且容易更改)。有没有别的办法???

【问题讨论】:

标签: web-services ip wan


【解决方案1】:

不要抓取 whatismyip.com,请参阅 here 了解如何调用他们的 API,该 API 只返回您的地址。

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

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

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

  • 或者,正如 Olaf 所指出的,在您和广泛开放的 Internet 之间可能存在另一个 NAT 路由器,换句话说,您的路由器的 WAN 地址位于专用网络上。您从 whatismyip.com 之类的服务中获得的最佳结果是最外层 NAT 路由器的 IP。

【讨论】:

【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我对 Paul Dixons 的回答投了赞成票,因为它看起来很完整,但还有一个方面:

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

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

    【讨论】:

      【解决方案4】:

      我没有看到语言规范,但我在 python 中做到了:Finding a public facing IP address in Python?
      基本上没有办法在不依赖外部服务器的情况下做到这一点,在这种情况下,我使用 http://www.whatismyip.com/automation/n09230945.asp 仅提供IP地址。 或者,您可以使用自己的 PHP 脚本:

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

      【讨论】:

      • 请注意,这不会考虑代理 - 请参阅 Paul Dixons 的回答:您可能想要解析 http-headers。
      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2011-12-26
      • 2020-10-18
      • 2010-12-13
      • 2013-05-19
      • 2010-11-04
      相关资源
      最近更新 更多