网络小工具
| 网址 | 描述 |
|---|---|
| https://ifconfig.co/port/24320 | 测试公网端口是否可达你的内网设备,会自动获取你的公网IP(nat转换)然后判断指定端口是否可达。 |
| https://www.ip138.com | 查IP归属地 |
curl查询本机公网ip
curl ifconfig.me
curl icanhazip.com
curl ipinfo.io/ip
curl ipecho.net/plain
curl cip.cc # 返回IP、地址及运营商详情
curl myip.ipip.net # 显示IP及归属地
curl ipinfo.io/json
curl ifconfig.co/json
NAT (Network Address Translation)
网络地址转换。私网地址(A)访问公网服务,如果经过NAT转换,报文源IP和端口会被NAT转换为私网出口IP(隶属公网IP),然后再发往指定的公网目的IP。返回的报文同样被NAT处理,将目的IP转换为私网地址(A)。
具体参考:https://info.support.huawei.com/info-finder/encyclopedia/zh/NAT.html
一般有4种NAT。
Fullcone 完全锥形 - NAT1
内网机器通过iAddr:port1发向外网的请求,都会映射成同一个eAddr:port2(经nat地址转换)。外界只要知道转换后的eAddr:port2,向这个地址发包,nat设备会自动反向映射回去,将外网的包转发给内网的iaddr:port1.
Restricted Cone 受限锥形 - NAT2
和上面类似,但增加了地址限制:只有内网iAddr:port1先向某个外网服务器X:port3发过包,nat设备才会将源地址为X,端口不限的任意包转发回内网iAddr;port1. 当然对于X来说,它所知道的地址是eAddr;port2.
Port Restricted Cone 端口受限锥形 - NAT3
和Restricted Cone类似,但额外增加了端口限制:内网iAddr;port1先向外网服务器X:port3发包,后续来自只有来自X:port3的回包会被nat设备转发回内网iAddr;port1. 也就是说,其他源地址(非X),X的其他端口(非port3)都不会被转发回内网,它是对地址和端口的同时锁定。
Symmetric - NAT4
和Port Restricted Cone非常类似,但也和所有锥形NAT有本质不同。相似在于,它们都锁定地址和端口,只有内网iAddr:port1向外网X:port3发过包,nat设备才会转发X:port3的回包。
而不同之处在于,前面三种锥形NAT,映射出去的公网地址都是唯一的(eAddr:port2)。无论iAddr:por1向X:Px, Y:Py, Z:Pz也好,通过nat地址转后的公网地址都是eAddr:port2,这样STUN检测到的端口可以给打洞提供有用的信息:“就往这个eAddr:port2这个地址发包”。而对称型NAT是指,
- iAddr:port1向X:Px发包,经nat设备转换后的地址是eAddr:portA
- iAddr:port1向Y:Py发包,经nat设备转换后的地址是eAddr:portB
- iAddr:port1向Z:Pz发包,经nat设备转换后的地址是eAddr:portZ
也就是说,内网机器访问外网的ip:port不同,经nat设备转换后的公网地址+端口就不同(一般公网地址是相同的,只是端口不同)。所以STUN探测到的公网端口,仅限STUN回包使用,对于别的ip要想回包给iAddr:port1,相应的eAddr:port?是未知的。这时STUN只能获得内网服务(iAddr:port1)的经nat转换后的公网地址eAddr,无法提供端口信息,大大提高了打洞的难度。
总结一下:
- NAT3:同一内部端口 → 固定一个外部端口;但只有“我已经从这个内部端口主动联系过的那些外部 IP+端口”能用这条映射打进来。
- NAT4: 同一内部端口,对每个外部 IP+端口都会得到不同的外部端口映射,且回包必须来自之前通信过的那个外部端点;映射关系依赖于
(内部 IP, 内部端口, 目标 IP, 目标端口)四元组,每个不同的目标端点往往得到不同的外部端口。这就是“对称型”或“Endpoint‑Dependent Mapping”的含义
STUN (Session Traversal Utilities for NAT)
NAT会话穿越应用程序。作用为NAT发现,获取NAT转换后的地址。原理是部署一个stun客户端(A)在私网,部署一个stun服务端(B)在公网。A向B发送STUN绑定请求,B收到后会把报文源地址(ip:port)放在包体载荷里面(payload),A收到后对比自己之前发送请求的源地址,如果不一样,说明AB之间存在NAT。同时,也可以通过报文载荷得知自己转换后的公网地址。
参考:https://info.support.huawei.com/info-finder/encyclopedia/zh/STUN.html
必学网络命令
- nc (netcat)
- socat: https://skywind.me/blog/archives/2644
- tcpdump