如果您的连接经过NAT,是否可以在没有发出出站Web请求的情况下查看您的外部IP地址?
任何操作系统(Windows,Linux等)都可以。
如果您的连接经过NAT,是否可以在没有发出出站Web请求的情况下查看您的外部IP地址?
任何操作系统(Windows,Linux等)都可以。
Answers:
如果您的计算机位于NAT之后,则可以看到路由器的外部IP地址,但是您需要对该路由器进行管理访问。
路由器知道您的外部IP地址,因此通过访问其配置页面可以找到该IP地址。除了Web浏览器之外,这种方式不需要任何专用工具。
需要用于获取信息的工具的其他协议:
如用户@dirkt所测试,所有方法仅适用于IPv4(PCP可能除外)。
WANIPConn1/GetExternalIPAddress
,并且它成功返回了正确的地址。
有几种方法可以与某些NAT一起使用,但不能保证任何方法都能在所有地方使用。
我相信uPnP,NAT-PMP和PCP(通用即插即用,NAT端口映射协议和端口控制协议)都可以询问兼容的NAT网关什么是公共地址,但并非所有NAT都支持这些协议。与企业或运营商级NAT解决方案相比,支持在家庭网关路由器中更为常见。
当您发现自己位于NAT的背后时,唯一可以确定将其流量转换为哪个公共IP地址的方法是将一些传出流量发送给某个将报告回来的公共主机,而NAT不会进行转换。解决您的访问量似乎来自何处。使用基于Web的服务是一种方法,但是例如,您也可以通过SSH进入云服务器实例并查看sshd
SSH会话的来源来实现。
您可以使用DNS请求,我相信它不会属于“网络请求”类别:
nslookup myip.opendns.com resolver1.opendns.com
dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns
。我在这里找到命令:groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…–
nsslookup
命令对我来说失败了。我得到 Server: resolver1.opendns.com
Address: 2620:119:35::35#53
** server can't find myip.opendns.com: NXDOMAIN
dig
因为它不在Windows上。关于myaddr
Google的好处是,我没有意识到!我想Windows的nslookup
等效标准是nslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
nslookup
要使用哪个IP版本进行传输,但是OpenDNS这样做的方式意味着您必须这样做。nslookup
否则,您将不得不预测将使用哪个IP版本进行传输,并相应地要求输入A或AAAA。如果您坚持使用nslookup
,可以使用其他提供商,例如Google。但是,您仍然在响应中仅获得一个协议版本,并且无法选择哪个。
nslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
,确实可以工作。但是,如果我同时拥有IPv4和IPv6,那我就不要选择看哪一个。它很可能会向我显示IPv6地址,并且很可能正在使用它,因为我想知道NAT的IPv4地址。为了解决这个问题,将需要使用具有仅IPv4名称和仅IPv6名称的服务,这也可以解决NAT64的问题。
我想在已经存在的答案中加一点。
它还取决于网络的复杂性。您的计算机可能位于具有多个外部IP地址的网络中,并且线路上某处的路由器会根据某些条件将流量发送到Internet,例如,目标IP地址或一天中的时间(可能是一个上行链路通道,在晚上或其他原因会更便宜)。
因此,为了完整起见,“外部IP地址”的概念可能需要定义您的地址位于外部的目的地。
在下面的示例中,Router #2
可以执行NAT并将流量发送到任一上行链路,并且接收主机可以看到的不同外部IP地址Host
。
也可能是某个目的地(例如host1.example.com
)始终通过进行路由Uplink A
,而主机host2.example.com
始终通过进行路由Uplink B
。因此,通过这些主机所看到的外部IP地址会有所不同,提供Uplink A
和Uplink 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 |
-----------
因此,发送流量将获得更可靠的结果。
您可以使用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地址。