了解 tcpdump 的 ip 数据包负载输出

Understanding tcpdump's ip packet payload output

当我连接到 ftp 服务器时,我在 ubuntu 上使用 tcpdump 捕获 IP 数据包。我得到了输出,但我没有完全理解输出。这是输出:

20:36:59.447287 IP 195.144.107.198.21 > 192.168.0.103.38358: Flags [P.], seq 1:15, ack 6, win 257, options [nop,nop,TS val 118776594 ecr 2892624995], length 14: FTP: 221 Goodbye.
0x0000: 4500 0042 67fb 4000 6906 b954 c390 6bc6 E..Bg.@.i..T..k.
0x0010: cQa8 0067 0015 95d6 b5d5 9b80 8f8f ed64 ...g...........d
©x0020: 8018 0101 273e 0000 0101 080a 0714 6312 ....'>........c.
0x0030: ac69 £463 3232 3120 476f 6f64 6279 652e .i.c221.Goodbye.
0x0040: Od0a

这是我关闭与ftp服务器的连接时捕获的数据包。我理解左边的 IP header 但我没有完全理解有效负载。退出ftp服务器时出现了“再见”的信息,剩下的是什么?我在说这个:

E..Bg.@.i..T..k.
...g...........d
....'>........c.
.i.c221.Goodbye.
..

那些句号和随机字符是什么(除了“再见”)?

这些点中的每一个都是不可打印的字符。 ASCII 最初开发时,0-31 是控制字符,其中一些是为了控制消息而设计的。 127 是删除,xxd 也将其视为控制字符。当 xxd 解释时,这些都将显示为 .

您可以通过在文件中保存从 0 到 127 的每个字符来复制它 ascii_chars

seq 0 127 | while read n; do printf "\x$(printf %x $n)" $n >> ascii_chars; done

如果我们将其传递给 xxd,我们可以看到前两行 (0-31) 和 127 是 ..

$ xxd ascii_chars
00000000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f  ................
00000010: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f  ................
00000020: 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f   !"#$%&'()*+,-./
00000030: 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f  0123456789:;<=>?
00000040: 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f  @ABCDEFGHIJKLMNO
00000050: 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f  PQRSTUVWXYZ[\]^_
00000060: 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f  `abcdefghijklmno
00000070: 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f  pqrstuvwxyz{|}~.