如何获取我的计算机的外部IP地址?

3
假设我的IP地址目前是:123.123.123.123 我该如何以编程方式获取这个字符串?
注意:我不想获取此IP:192.168.0.10,我想要那个其他人可以通过HTTP或其他任何方式连接到我的计算机的IP。
注:我不想打开像ip4.me这样的网页来获取地址,我想仅用C++获取它。
我尝试过搜索引擎,但每个建议都是“加载一个页面并读取它告诉你的IP”。真的只有这种方法吗?!

3
唯一的其他方法是以某种方式查询连接您到互联网的设备(例如您的DSL路由器/调制解调器)。 这方面没有通用接口,可能有一些库,但标准的C ++中没有。 - Mat
你是怎么连接的?在工作中,我们有2或3个IP地址被1万人共享。在这种情况下,知道外部地址是没有用的。 - Bo Persson
没有API可以做到这一点,因为您的计算机根本不知道外部IP地址是什么。Windows无法提供它没有的信息。您为什么需要外部地址呢? - Harry Johnston
@BoPersson,如果这对你没用,不代表它对其他人没用。 - Rookie
2个回答

4
您可以从http://api.externalip.net/ip/或类似的服务获取它,但我不确定这些网站的可靠性。

其他任何方式都非常复杂,因为一般情况下,没有网络设备能够提供外部IP的API,即使有,您也无法判断您面前是一个简单的xDSL路由器还是Cisco ASA转发出站流量。


你知道哪些只返回IP而不返回其他信息的网站,以便于解析?(如果其中一个不起作用,最好有备选网站) - Rookie
当然,在这种情况下,回退应该是必须的... http://checkip.dyndns.org/ 应该很容易解析,http://automation.whatismyip.com/n09230945.asp 也只是IP地址。 - Ivor Prebeg

3
我的建议是使用记录路由选项发送数据包。
如果您知道上游网关,应该能够找到一个ping命令,允许您设置记录路由,然后将该数据存储在数组中或者从中提取需要的信息。
我相信您的WAN IP地址应该是记录0或1。
您正在使用哪个网络库?

嗯,你可能需要查看比winsock更高层次的东西。这是一个解决方法。out = system("ping -r 9 xxx.xxx.xxx.xxx");(使用你的路由器连接到的网关作为xxx.xxx.xxx.xxx。你可能能够使用更远的其他网关,但我知道它在Mac上不起作用)你可以通过运行该命令来查看返回值。重要的一行是 Route: host [you.rwa.nip.hre]。此时可以使用grep获取该信息。 - sudononymous

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