如果我有一个看起来像这样的网络:
56.56.56.56 192.168.0.1/24
___________
---| Modem 1 |-----
| ___________ | ___________
11.22.33.44 ---| |--------| Machine |
| ___________ | ___________
---| Modem 2 |----- 192.168.0.3/24
___________
67.67.67.67 192.168.0.2/24
...调制解调器 1 和调制解调器 2 都将 ssh 端口转发到 192.168.0.3。
当我tcpdump port ssh
在 192.168.0.3 上调用机器,然后从 11.22.33.44 SSH 到 56.56.56.56 时,输出如下所示:
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:51:16.147870 IP 11.22.33.44.55936 > 192.168.0.3.ssh: Flags [S], seq 642687408, win 14600, options [mss 1460,sackOK,TS val 1631250991 ecr 0,nop,wscale 7], length 0
16:51:16.147957 IP 192.168.0.3.ssh > 11.22.33.44.55936: Flags [S.], seq 55101726, ack 642687409, win 28960, options [mss 1460,sackOK,TS val 1829635753 ecr 1631250991,nop,wscale 7], length 0
16:51:17.147444 IP 11.22.33.44.55936 > 192.168.0.3.ssh: Flags [S], seq 642687408, win 14600, options [mss 1460,sackOK,TS val 1631251992 ecr 0,nop,wscale 7], length 0
如您所见,tcpdump
似乎只给我原始 ip 作为“源”ip,将“最终”ip 作为目的地。
需要什么命令来告诉tcpdump
打印或过滤:
- 最后一跳(例如图中的192.168.0.1 或 192.168.0.2)
- “公共”IP(例如图中的 56.56.56.56 或 67.67.67.67)
- 下一跳(例如用于数据包出去而不是进来的调制解调器)
Tcpdump 仅捕获数据包本身,并且没有有关路由/外部原始地址/等的其他信息。
-e
的命令行选项tcpdump
来显示帧的以太网标头。根据语法为 BPF的 tcpdump 表达式:
这回答了(1)和(3)。
就 (2) 而言,源 IP 在 NAT 之后会发生变化,因此您必须在 NAT之外拥有一台机器来见证该 IP。