2012-07-15 136 views
1

可以说我的IP目前是:123.123.123.123如何获取我的电脑外部IP地址?

如何以编程方式获取该字符串?

注:我不想得到这个IP:192.168.0.10,我想要那个IP其中其他人可以使用连接到我的计算机通过HTTP或任何东西。

注:我不想打开一些网页,如ip4.me得到的地址,我想只用C++来得到它。

我试图谷歌,但每次有人建议,“加载一个页面,阅读它会告诉你的IP。”这真的是唯一的方法吗?!

+3

唯一的另一种方式是以某种方式查询连接到互联网的东西(如您的DSL路由器/调制解调器)。这没有通用接口。可能是一些库,但没有标准的C++。 – Mat 2012-07-15 12:20:41

+0

你如何连接?在工作中,我们有两个或三个IP地址由10.000人共享。在这种情况下知道外部地址是没有用的。 – 2012-07-15 14:21:04

+0

有没有API来做到这一点,因为你的电脑*不知道*外部IP地址是什么。 Windows无法为您提供它没有的信息。为什么你需要外部地址? – 2012-07-15 20:21:27

回答

4

您可以从http://api.externalip.net/ip/或一些类似的服务获取,但我不知道这些网站如何可靠的是,在可用性意味着

任何其他方式将是极其复杂的,因为一般来说,没有网络设备有api告诉外部IP,并且即使它有,您不能分辨是否有在您之前的一个简单的xDSL路由器或思科ASA nating出站的交通

+0

你知道哪些其他网站,只返回IP而没有其他网站,所以它很容易解析? (如果其中一个不起作用,那么有一个退后的网站可能很明智)。 – Rookie 2012-07-15 13:12:15

+0

当然,回退应该在这种情况下是必须的.​​..... http://checkip.dyndns.org/应该很容易解析,http://automation.whatismyip.com/n09230945.asp是IP地址仅过 – 2012-07-15 13:41:36

+0

更多你知道的网站? :) – Rookie 2012-07-16 11:12:15

2

我的建议是发送与记录路线选择的数据包。

如果你知道你的上行网关,你应该能够找到一个ping命令,允许您设置记录路由,然后在数组或数据的东西,你可以任意的正则表达式商店。

您的WAN IP应该是记录0或记录1,我相信。

你在使用什么网络库?

+0

。 – Rookie 2012-07-15 13:36:34

+0

Hrm。你可能想看看比winsock更高层的东西。这是一个解决方法。 'out = system(“ping -r 9 xxx.xxx.xxx.xxx”);'(使用你的路由器连接的网关为xxx.xxx.xxx.xxx。你也许能够使用其他的更远的,但是我知道它在Mac上不起作用)通过运行该命令可以看到这会返回什么。重要的一行是'Route:host [you.rwa.nip.hre]'grep会在那个时候为你提供这些信息。 – sudononymous 2012-07-16 03:42:31