【问题标题】:How to get external IP without relying on third party servers?如何在不依赖第三方服务器的情况下获取外部 IP?
【发布时间】:2013-08-12 23:44:14
【问题描述】:

有什么方法可以在不建立网络外部连接的情况下检索外部 IP 地址?

也许通过某种方式询问路由器?

如果我在路由器后面,操作系统是否知道我拥有的 IP?

StackOverflow 上的所有方法都推荐某种第三方提供商,但我希望我的应用程序独立于其他服务器。

编辑:我发现的最佳解决方案是:http://code.google.com/p/csharp-upnp-portmapper/

依赖于 UPnP。

【问题讨论】:

  • 不,没有普遍适用的方法来做到这一点。这就是为什么您找到的答案需要联系外部来源。
  • 如果有两个路由器怎么办?
  • 使用 2 个路由器,您有 3 个 ip:内部、中间、外部。要获得中间或外部的 ip,您需要询问该网络中的人。
  • 是否存在任何可以使用的标准?像 UPnP 还是 NAT-PmP?
  • 是的,UPnP 是要走的路,另请参阅superuser.com/questions/420243/… 以获得一些想法,尽管没有一个解决方案是非常具体的。当然,如果路由器本身位于 NAT 之后,您将无法获得最外层的 IP - 但也许可以递归地应用 UPnP...

标签: routing ip ip-address nat


【解决方案1】:

如果路由器有webinterface,你可以在路由器的webinterface中获取状态页面,并从html中解析出ip地址。

Telenor 4G 路由器的 php 示例

<?php
$url = "http://192.168.0.1/platform.cgi?page=home.htm";
$page = file_get_contents($url);
preg_match("/IP Address: [^0-9]+(?<ip>[0-9]+(\.[0-9]+){3})</", $page, $matches);
$ip = $matches['ip'];
echo $ip
?>

由于大多数路由器都需要用户名和密码,因此您可能希望使用 curl 发布 thouse,然后在登录后获取页面。

【讨论】:

  • 是的,我正在考虑这样的事情,但我希望它可以在大多数路由器上工作,而不仅仅是我自己的。
  • 由于路由器没有标准报告外部 ip,如果您不信任外部 ip 的 web 服务,我的建议是设置它们的列表,如果失败,请尝试列表中的下一个,或者尝试全部并使用您从大多数人那里获得的 ip,我目前首选的来源是 dns.loopia.se/checkip/checkip.php
猜你喜欢
  • 2016-12-03
  • 2023-04-06
  • 2014-12-07
  • 2015-04-19
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多