8

我有一台小型网络上的计算机,所以我的 ip 是 192.168.2.100。

我正在尝试获取我的真实IP。我下载了 no-ip 客户端,但对于这么简单的事情来说,这似乎很麻烦。

我创建了这个 php 脚本,它获得了http://www.ip-adress.com/页面并检索了它给我的 ip。

有没有更简单的方法?使用 C、WSH 或其他东西。或者如果在 php 中有更简单的方法,请告诉我。

当我得到 ip 时,我会将它上传到我的 ftp 站点,这样我就可以看到工作中的 ip。

4

12 回答 12

12

不,真的没有更简单的方法。你的计算机真的不知道它背后的公共 IP——它和公共互联网之间可能有任意数量的 NAT 层。它只知道它在 192.168.2.100 接收消息,并通过 192.168.2.1 的网关发送传出消息。它不知道数据包到达网关后会发生什么。

于 2009-05-27T18:42:11.940 回答
6

请注意重新发明轮子,有一个标准协议 STUN(已经存在的实现),就是为了这个。另请参阅以编程方式发现公共 IP

于 2009-05-28T14:56:27.343 回答
3

不完全符合您的要求,但仍然适用于您想要的。我在我的家用电脑上设置了一个 GMail 通知程序,然后转到帐户活动页面以查看哪个 IP 地址正在访问我的 Google 帐户。安全、简单且有效。

于 2009-05-27T18:43:28.990 回答
2

如果您想获得远程站点在处理流量时显示的最终 IP,那么唯一的方法是实际访问远程站点。在许多情况下,您的计算机可能不知道 IP 正在被代理或 NAT 服务器更改。

于 2009-05-27T18:41:25.390 回答
2

我总是curl http://whatismyip.org在 NAT 后面获取我的公共 IP。

于 2009-05-27T18:50:09.630 回答
2

您也可以访问此页面以获取您的 IP

http://www.biranchi.com/ip.php

于 2009-11-25T04:14:07.493 回答
1

一些路由器可以通过 UPnP 或者更具体地说是IGD 协议告诉您他们的外部 IP 地址。如果你碰巧拥有一个支持 UPnP 的路由器,你可以试试这个。IStaticPortMapping::get_ExternalIPAddress听起来很有希望。

启用 SNMP 的设备也可以告诉您它们的 IP 地址。要请求的 OID 是IP-MIB::ipAdEntAddr

于 2009-05-27T18:43:57.773 回答
1

当我需要检查我的公共 IP 地址时,我喜欢这个网站:

http://www.whatismyip.global/

该网站保留了您的 IP 历史记录。对我来说非常有用!

于 2016-03-28T19:30:53.380 回答
0

你这样做的方式可能和任何方式一样好。

你说你有一个公共的 FTP 站点——你那里也有一个网站吗?您的另一个选择是让您的本地计算机访问该面向公众的站点上的 php 页面。该 php 页面可以验证您的身份,然后使用 $_SERVER['REMOTE_ADDR'] 记录您的外部 IP。

于 2009-05-27T18:42:37.557 回答
0

不幸的是,您的服务器很可能完全不知道它自己的外部地址是什么(因为它可能通过某些路由器/网关设置在上游)

你可以看看这个链接

http://ip-address.domaintools.com/myip.xml

它可能比您当前正在做的更容易解析。

于 2009-05-27T18:44:35.307 回答
0

我想不出你会如何从另一台机器的角度解析你的 IP 地址。这里有几个想法:

  • 自动加载 ip-adress.com 页面并解析它
  • 看看DynDNS
于 2009-05-27T18:45:02.200 回答
0

除了下一跳是哪一跳(通常是您的路由器的内部 ip),您的计算机没有任何关于它和互联网之间发生的 NAT 或路由的信息。它根本不知道内部地址在哪一跳被转换为哪个公共地址。

因此,没有任何语言可以调用的简单函数或方法。

唯一的两种方法是问别人。如何?:

  • 通过获取和解析路由器管理站点上的正确页面来询问您的 NAT 路由器(因为它本身会转换为公共 IP)。可以说是最可靠、最公平的。
  • 通过获取和解析诸如http://dynamic.zoneedit.com/checkip.html之类的公共服务,询问外部主机它如何看待您。VB 脚本中的一个示例在这里
于 2009-05-27T19:11:29.510 回答