如何使用 tcpdump 捕获和查看数据包内容

Din*_*esh 13 tcpdump

我正在尝试将 HTTP 流量传输到文件中的端口 8007,然后再查看它们。

# tcpdump -i eth0 -s0 -n -w /tmp/capture port 8007 &
# tcpdump -r /tmp/capture -A | grep '10.2.1.50'
Run Code Online (Sandbox Code Playgroud)

我希望看到 ASCII 格式的数据包数据,但这并没有发生。我得到的是这样的:

23:03:16.819935 IP 10.2.1.50.8007 > 10.2.1.120.57469: . ack 1369 win 272 <nop,nop,timestamp 188139705 215355175>
23:03:16.819943 IP 10.2.1.120.57469 > 10.2.1.50.8007: P 1369:1592(223) ack 1 win 12 <nop,nop,timestamp 215355175 188139703>
23:03:16.819947 IP 10.2.1.50.8007 > 10.2.1.120.57469: . ack 1592 win 272 <nop,nop,timestamp 188139705 215355175>
23:03:17.029587 IP 10.2.1.50.8007 > 10.2.1.120.57469: P 1:780(779) ack 1592 win 272 <nop,nop,timestamp 188139758 215355175>
23:03:17.029736 IP 10.2.1.50.8007 > 10.2.1.153.49989: F 822:822(0) ack 3494 win 272 <nop,nop,timestamp 188139758 1641992210>
23:03:17.040759 IP 10.2.1.120.57469 > 10.2.1.50.8007: . ack 780 win 15 <nop,nop,timestamp 215355396 188139758>
23:03:17.079305 IP 10.2.1.153.49989 > 10.2.1.50.8007: . ack 823 win 15 <nop,nop,timestamp 1642053303 188139758>
Run Code Online (Sandbox Code Playgroud)

如何修复写入或读取以查看实际内容?我尝试了其他选项,例如 -v 但这不适用于内容。我正在使用 SLES 11 SP2。这tcpdump是正确的工具吗?

非常感谢。

- 编辑

# tcpdump --version
tcpdump version 3.9.8
libpcap version 0.9-PRE-CVS
Run Code Online (Sandbox Code Playgroud)

我也尝试使用 -X 选项,但仍然看不到有效负载数据。

小智 18

使用tcpdump -X

例如(适用于我使用的 Fedora/Centos):

sudo tcpdump -nvvvXi br0 

    13:29:20.311228 00:1c:73:86:12:f9 > 01:00:5e:00:01:81, ethertype IPv4 (0x0800), length 86: (tos 0x0, ttl 5, id 0, offset 0, flags [none], proto UDP (17), length 72)
        10.134.245.1.ptp-general > 224.0.1.129.ptp-general: Ptp MessageType: Follow_Up, SequenceId: 8208
    
            0x0000:  4500 0048 0000 0000 0511 d49c 0a86 f501  E..H............
            0x0010:  e000 0181 0140 0140 0034 0cd0 0802 002c  .....@.@.4.....,
            0x0020:  0100 0000 0000 0000 0000 0000 0000 0000  ................
            0x0030:  444c a8ff ffc7 1f6b 0236 2010 0200 0000  DL.....k.6......
            0x0040:  5f2a b430 0d5e b480                      _*.0.^..
Run Code Online (Sandbox Code Playgroud)

  • 这才是真正的答案! (3认同)

Kal*_*mar 12

您只能看到标头而不是数据包内容,因为您将输出通过管道传输到 grep。所以它只是获取存在 IP 地址的行。

-A选项也tcpdump提供数据包内容。

  • 我是说如果你删除`| grep '10.2.1.50'` 命令的一部分,您也将能够看到所有数据包内容。如果要搜索具有该 IP 的数据包的内容,请让 grep 打印出该 IP 所在行的后续行。 (3认同)
  • 来自问题:`# tcpdump -r /tmp/capture -A | grep '10.2.1.50'` (2认同)

Dis*_*ame 4

这就是内容。您可能使用过一些命令来过滤内容。