获取我的广域网IP地址

3
我该如何以编程的方式获取我的网络从Internet上看到的IP地址?很明显,当我的路由器连接到ISP时,它可以访问此属性。是否有一种使用标准协议从路由器获取此信息的方法?我的另一个选择是查找返回我的IP地址的Web服务(出奇地难以做到),或者只需转到像whatismyip.com这样的网站并剥离所有HTML(非常不干净且易受更改)。还有其他方法吗?

你可以使用 https://api.ipify.org/。 - Liviu Trifoi
4个回答

8
不要爬取whatismyip.com,查看这里了解如何调用其API,该API只返回您的地址。如果您不使用此选项,则必须自己编写类似的内容,即一个在路由器之外的主机,可以报告您的表面地址。请注意,Web服务器可能无法看到您的真实WAN IP地址,因为:
- 您的ISP可能会透明地代理HTTP流量,服务器将看到代理的IP。在这种情况下,通常需要查找和解析X-Forwarded-For头。 - 或者,正如Olaf所指出的那样,您和广阔的互联网之间可能还有另一个NAT路由器,换句话说,您的路由器的WAN地址在私有网络上。从whatismyip.com这样的服务中获得的最好结果是最外层NAT路由器的IP。

截至2014年1月8日,http://www.whatismyip.com/automation.asp 返回404。有人知道新的API文档在哪里吗? - thom_nic

2

2

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

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

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


1

请注意,这不考虑代理 - 有关此内容,请参见Paul Dixons的答案:您可能想解析http头。 - Olaf Kock

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