如果我有一个如下的网络:
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)
- 这下一跳(例如,用于数据包传出而不是传入的调制解调器)
答案1
Tcpdump 仅捕获数据包本身,没有关于路由/外部原始地址/等的附加信息。
- 数据包中没有明确的最后一跳 IP 地址,但您可以使用以太网源地址间接确定它。您需要使用附加
-e
命令行选项来tcpdump
显示帧的以太网报头。 - 无法显示数据包到达的原始公共 IP,因为该信息在数据包中丢失并且仅存储在调制解调器盒中的转换表中。
- 这也是不可能的。Tcpdump 不会查找原始数据包的路由,显然也不会查找回复数据包的路由。
答案2
根据tcpdump 表达式其语法是BPF:
tcpdump乙太主机11:22:33:44:55:66
转储发往或来自该 MAC 地址的所有数据包
这回答了(1)和(3)。
就 (2) 而言,源 IP 在 NAT 之后会发生变化,因此你必须有一台机器外部NAT 来见证该 IP。