如果您的连接是 NAT,是否有可能在不发出出站 Web 请求的情况下查看您的外部 IP 地址?
任何操作系统(Windows、Linux 等)都可以。
答案1
如果您的计算机位于 NAT 后面,您可能会看到路由器的外部 IP 地址,但您需要具有路由器的管理访问权限。
路由器知道您的外部 IP 地址,因此您可以通过访问其配置页面来找到该 IP 地址。这种方式不需要任何专门的工具,只需使用 Web 浏览器即可。
其他需要工具来获取信息的协议:
- 即插即用
- NAT 端口映射协议 (NAT-PMP)
- 端口控制协议 (PCP),在 IPv6 网络上将返回 IPv6 前缀。它实际上可以做更多的事情,但其中很多功能通常不会在消费级路由器上实现。
经用户@dirkt 测试,所有方法仅适用于 IPv4(PCP 可能除外)。
答案2
有几种方法可以与某些 NAT 配合使用,但没有一种方法可以保证在任何地方都有效。
我相信 uPnP、NAT-PMP 和 PCP(通用即插即用、NAT 端口映射协议和端口控制协议)都有方法向兼容的 NAT 网关询问公共地址是什么,但并非所有 NAT 都支持这些协议。与企业或运营商级 NAT 解决方案相比,家庭网关路由器更支持这些协议。
当您发现自己处于 NAT 后面时,唯一可以确定的方法是将一些传出流量发送到某个公共主机,该主机将以 NAT 无法转换的方式报告您的流量来自哪个地址。使用基于 Web 的服务是一种方法,但您也可以通过 SSH 进入云服务器实例并查看您的 SSH 会话来自何处sshd
。
答案3
您可以使用 DNS 请求,我认为这不属于“Web 请求”类别:
nslookup myip.opendns.com resolver1.opendns.com
答案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 地址。