是否可以在没有发出出站Web请求的情况下查看我的外部IP地址?


21

如果您的连接经过NAT,是否可以在没有发出出站Web请求的情况下查看您的外部IP地址?

任何操作系统(Windows,Linux等)都可以。


7
您只是在尝试避免使用HTTP,还是在尝试完全避免发送任何传出流量?唯一通用的解决方案涉及发送某种传出流量,但不必一定是HTTP。
Spiff

这更多只是一个假设,我根本不想进行任何出站流量。
Axel Persinger

2
您是说您的网络/路由器处于企业级NAT设置的背后(即,它正在从ISP获取私有IP地址)吗?如果是这样,我想不到的是,您可以找到公共IP地址,而无需访问公共网络,而实际上可以像whatsmyip.com或类似服务那样“回头看”。
acejavelin

我曾经做过的黑客是用我的路由器检查-实际上我有一个很脏的脚本来抓取该脚本,因为由于某些原因,大多数基于Web的服务都无法正确检测到我的IP。这样我的ISP真的很有趣。
Journeyman Geek

2
您可以尝试通过客户详细信息致电ISP。不需要互联网连接,也不需要计算机。
托马斯

Answers:


24

如果您的计算机位于NAT之后,则可以看到路由器的外部IP地址,但是您需要对该路由器进行管理访问。

路由器知道您的外部IP地址,因此通过访问其配置页面可以找到该IP地址。除了Web浏览器之外,这种方式不需要任何专用工具。

需要用于获取信息的工具的其他协议:

如用户@dirkt所测试,所有方法仅适用于IPv4(PCP可能除外)。


@NicHartley夸张肯定可以成为嘲讽的一部分,但是嘲讽更多地是一种嘲笑的语气或意图,两者的表达方式和文字表达方式都不一样。话虽如此,尽管任何协议都必须使用IP来确定IP地址是显而易见的且是重言式的要求(因为您无法确定未使用的内容),但是建立在IP之上的协议仍然是一个不同的协议,并且从理论上讲,可以使用多个来完成此目标。Lightness的观点是要反驳有关Web请求要求的主张。
eques

2
“任何其他方式都需要进行外部Web请求的” Web(HTTP即)不是必需的,但也许是最容易把握
eques

1
如另一个答案中所述,除了访问路由器的配置页面外,uPnP,NAT-PMP和PCP是从路由器获取信息的不同方法。您所说的方式看起来像“除了访问配置页面外,任何其他方式都需要发出Web请求”。正确的是“除了从路由器获取信息以外,任何其他方式都将需要进行出站连接尝试”(不必是Web请求)。
dirkt '18

@dirkt:对于UPnP,我不相信;我认为NAT-PMP仅适用于IPv4。IPv6网络上的PCP将返回IPv6前缀,并且可以执行更多操作,但这通常不能在商用路由器上实现。
harrymc '18

1
@harrymc:我的Fritzbox的UPnP服务端点是WANIPConn1/GetExternalIPAddress,并且它成功返回了正确的地址。
dirkt

12

有几种方法可以与某些NAT一起使用,但不能保证任何方法都能在所有地方使用。

我相信uPnP,NAT-PMP和PCP(通用即插即用,NAT端口映射协议和端口控制协议)都可以询问兼容的NAT网关什么是公共地址,但并非所有NAT都支持这些协议。与企业或运营商级NAT解决方案相比,支持在家庭网关路由器中更为常见。

当您发现自己位于NAT的背后时,唯一可以确定将其流量转换为哪个公共IP地址的方法是将一些传出流量发送给某个将报告回来的公共主机,而NAT不会进行转换。解决您的访问量似乎来自何处。使用基于Web的服务是一种方法,但是例如,您也可以通过SSH进入云服务器实例并查看sshdSSH会话的来源来实现。


8
如果系统落后于双(或更多)NAT,UPnP等也可能给出错误的结果。
user71659 '18

@ user71659我一直想知道是否存在一个任播地址,该地址将自动路由到最外面的NAT,以便可以将其用于这种请求。
卡巴斯德(Kasperd)'18年

1
@kasperd每个NAT都认为它是最外层的NAT。当然,有些IP会自动路由到所有NAT之外。这些被称为公共IP。
user253751 '18

1
@ user20574不,NAT不这么认为,大多数只是不在乎。如果要定义这样的一个任播地址,则标准还需要定义NAT何时将IP分配给自己,何时不分配。答案是,如果外部IP在RFC 1918或RFC 6598中,则NAT将不会为其自身分配任播地址。
kasperd

8

您可以使用DNS请求,我相信它不会属于“网络请求”类别:

nslookup myip.opendns.com resolver1.opendns.com

1
您也可以使用dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns。我在这里找到命令:groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…–
kasperd

您的nsslookup命令对我来说失败了。我得到 Server: resolver1.opendns.com Address: 2620:119:35::35#53 ** server can't find myip.opendns.com: NXDOMAIN
卡巴斯德(Kasperd)'18

1
@kasperd:抱歉,它仅适用于IPv4。我避免了,dig因为它不在Windows上。关于myaddrGoogle的好处是,我没有意识到!我想Windows的nslookup等效标准是nslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
Mehrdad

我在同时具有IPv4和IPv6的计算机上运行了该命令,因此,如果确实支持IPv4,它应该可以工作。问题显然是您无法指示nslookup要使用哪个IP版本进行传输,但是OpenDNS这样做的方式意味着您必须这样做。nslookup否则,您将不得不预测将使用哪个IP版本进行传输,并相应地要求输入A或AAAA。如果您坚持使用nslookup,可以使用其他提供商,例如Google。但是,您仍然在响应中仅获得一个协议版本,并且无法选择哪个。
kasperd

我测试了nslookup -type=txt o-o.myaddr.l.google.com ns3.google.com,确实可以工作。但是,如果我同时拥有IPv4和IPv6,那我就不要选择看哪一个。它很可能会向我显示IPv6地址,并且很可能正在使用它,因为我想知道NAT的IPv4地址。为了解决这个问题,将需要使用具有仅IPv4名称和仅IPv6名称的服务,这也可以解决NAT64的问题。
卡巴斯德'18

7

我想在已经存在的答案中加一点。

它还取决于网络的复杂性。您的计算机可能位于具有多个外部IP地址的网络中,并且线路上某处的路由器会根据某些条件将流量发送到Internet,例如,目标IP地址或一天中的时间(可能是一个上行链路通道,在晚上或其他原因会更便宜)。

因此,为了完整起见,“外部IP地址”的概念可能需要定义您的地址位于外部的目的地。

在下面的示例中,Router #2可以执行NAT并将流量发送到任一上行链路,并且接收主机可以看到的不同外部IP地址Host

也可能是某个目的地(例如host1.example.com)始终通过进行路由Uplink A,而主机host2.example.com始终通过进行路由Uplink B。因此,通过这些主机所看到的外部IP地址会有所不同,提供Uplink AUplink B不同的互联网服务供应商。

   Uplink A                                  Uplink B
-------------                             -------------
      |                                         |
      |                                         |
      |     192.168.1.1         192.168.50.50   |
      |               -----------               |
      |---------------|Router #2|---------------|
                      -----------
                           |  192.168.100.1
                           |
                           |  192.168.100.2
                      -----------
                      |Router #1|
                      -----------
                           |  192.168.200.1
                           |
                           |  192.168.200.2
                      -----------
                      |   Host  |
                      -----------

因此,发送流量将获得更可靠的结果。


4

您可以使用DNS而不是HTTP。例如,您可以使用:

dig +short TXT o-o.myaddr.l.google.com

这将显示您正在使用的DNS服务器的单播地址,如果它支持EDNS,它也会显示您的IP地址,尽管可能会被截断。

要获取完整的IP地址,您可以绕过本地DNS服务器,直接将上述请求发送到ns {1,2,3,4} .google.com

dig +short TXT o-o.myaddr.l.google.com @ns3.google.com

如果要查看特定协议版本的IP地址,可以使用-6-4

dig -6 +short TXT o-o.myaddr.l.google.com @ns3.google.com
dig -4 +short TXT o-o.myaddr.l.google.com @ns3.google.com

如果愿意,也可以使用OpenDNS。OpenDNS对此不使用TXT记录,而是使用A和AAAA记录,因此您必须指定要查找的协议版本:

dig -6 +short AAAA myip.opendns.com @resolver2.opendns.com
dig -4 +short A myip.opendns.com @resolver2.opendns.com

请注意,如果您的流量通过协议转换,则可能会得到不同的结果,或者根本没有。在NAT64后面的机器上进行测试,我可以使用上述命令查看我的IPv6地址,但看不到NAT64的IPv4地址。

这个答案基于这些来源1 2 3和我自己的一些研究。


2

Web通常是指HTTP,如果这是您的问题的意思,那么例如,您可以使用STUN(维基百科文章),它代表“ NAT的会话遍历实用程序”。

现在,如注释中突出显示的那样,您可能具有多个外部IP。另外,随着无线连接变得越来越普遍(4G事物),路由器报告的IP地址将不再是公共地址成为可能。我什至在某些国家也遇到过这种情况,即ISP将为本地路由器提供一个私有IP,然后在离开网络时将1:1转换为公共IP。

因此,如果您的问题是“我可以在不发送数据包的情况下找到我的公共IP”,则可以在您的上下文中使用,但没有100%证明的解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.