当我的移动设备通过 4g 连接到互联网时,我只想验证哪些端口是打开的,但只是在它的“4g ip”地址上进行网络连接甚至 ping 它是行不通的。当通过 wifi 连接时,ping 和 netcat 到它的内部 IP 地址工作正常,而且我也能够 ping 外部 IP 地址,所以问题不在于我自己的连接。
$ ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=248 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=32.6 ms
从 whatismyip.com 获得电话 IP 地址,然后 ping 它,我得到了
$ ping -4 82.132.xxx.xxx
PING 82.132.xxx.xxx (82.132.xxx.xxx) 56(84) bytes of data.
^C
--- 82.132.xxx.xxx ping statistics ---
23 packets transmitted, 0 received, 100% packet loss, time 22532ms
只是显示 ping google 工作正常:
$ ping -v -4 google.com
ping: socket: Permission denied, attempting raw socket...
PING google.com (216.58.204.46) 56(84) bytes of data.
64 bytes from lhr25s12-in-f14.1e100.net (216.58.204.46): icmp_seq=1 ttl=53 time=3.71 ms
64 bytes from lhr25s12-in-f14.1e100.net (216.58.204.46): icmp_seq=2 ttl=53 time=3.07 ms
我猜即使您知道它的 IP 地址也不可能简单地路由到任何移动设备,那么还有其他选择吗?
很多移动运营商都实现了CGNAT,网站看到的外部地址不属于设备,属于ISP运行的NAT网关。所以不要相信这个地址,除非你在设备本身上看到它。
最重要的是,大多数移动运营商不提供专用 IP 地址——他们执行“1:many” NAT,而不仅仅是 1:1 NAT,并且外部地址被多个客户同时使用(就像您的家庭路由器共享您的外部所有 LAN 设备之间的地址)。
即使是那些为每个客户指定一个地址(无论是直接地址还是 1:1 NATed)的运营商,也经常将其置于阻止所有传入连接的防火墙后面。这有两个目的——它可以防止客户在他们的 4G 连接上托管服务(这通常是他们的服务条款不允许的),它可以防止各种僵尸网络扫描和未经请求的连接耗尽设备的电池。
大多数时候,您只是在 ping NAT 网关,而不是设备本身。