tcpdump -c 100 -w /root/tcpdump.txt
如果您使用 -w 的名称以 .txt 结尾,那么您会误解 -w 的作用。
-w 以 pcap 格式写出 完全二进制 文件,该文件旨在由 tcpdump 或其他程序(例如 Wireshark)读取,不 供人类直接阅读!
IF 数据包在某些层上携带基于文本的协议,例如 FTP 控制协议、SMTP 或 HTTP 请求/响应及其标头,则文件中的 部分 数据将为文本,但 NOT 全部为文本。 不是否将其视为表明它是或应该是文本文件的指示。
但是,我希望在没有二进制文件的数据包数据本身(在同一文件中)之前显示数据包内容描述(运行 tcpdump 时通常在 STDOUT 上显示的内容)。
数据包数据本身是二进制的!
如果你的意思是你想要一个数据包数据的文本十六进制转储,格式如
0x0000: 0001 0800 0604 0001 0001 0000 0010 0a78
0x0010: 0452 0000 0000 0000 0a78 0452 0101 0600
在数据包描述之后,让你看到的是这样的:
17:49:38.007886 ARP, Request who-has 10.120.4.82 tell 10.120.4.82, length 32
0x0000: 0001 0800 0604 0001 0001 0000 0010 0a78
0x0010: 0452 0000 0000 0000 0a78 0452 0101 0600
那么你应该这样做
tcpdump -c 100 -x >/root/tcpdump.txt
这样 tcpdump 的 text 输出——当你不使用-w时得到的输出——被重定向到/root/tcpdump.txt而不是被打印您的终端或终端仿真器,以便写入十六进制转储以及数据包描述(这就是 -x 告诉 tcpdump 做的事情)。
这不会写出十六进制转储中数据包的链路层标头;如果您想要数据包的链路层标头,例如
17:49:38.007886 ARP, Request who-has 10.120.4.82 tell 10.120.4.82, length 32
0x0000: ffff ffff ffff 0001 0000 0010 0806 0001
0x0010: 0800 0604 0001 0001 0000 0010 0a78 0452
0x0020: 0000 0000 0000 0a78 0452 0101 0600
然后使用-xx 而不是-x。