如何在不使用二进制文件的情况下将tcpdump保存到文件中?

Chr*_*ris 5 unix tcpdump

我想将数据包内容描述和数据包数据捕获到一个文件中,tcpdump以备日后检查.

目前我正在使用-w选项将数据包数据保存到文件:

tcpdump -c 100 -w /root/tcpdump.txt
Run Code Online (Sandbox Code Playgroud)

这将分组数据保存到文件中,但在每个分组之前还包括几行二进制.但是,我希望tcpdump在没有二进制文件的数据包数据本身(在同一文件中)之前显示数据包内容描述(运行时通常显示在STDOUT上的内容).

因此该文件应为每个数据包保存以下内容:

  1. 包内容描述
  2. 分组数据

我想要保存到文件的示例:

17:17:42.847059 IP some.server.com.17845 > some.host.net.55618: Flags [P.], seq 137568:137888, ack 1185, win 167, length 320
<-- Followed by the raw packet data here -->
Run Code Online (Sandbox Code Playgroud)

此信息将用于以后的文件分析,以便我们查看发往特定主机/地址的完整数据包.

任何人都可以建议如何做到这一点?

小智 8

tcpdump -c 100 -w /root/tcpdump.txt

如果你使用-w一个以名称结尾的名字.txt,你会误解是什么-w.

-w写出一个完整的二进制文件,采用pcap格式,由tcpdump或其他程序(如Wireshark)读取,不要被人类直接读取!

如果数据包在某个层上携带基于文本的协议,例如FTP控制协议,SMTP或HTTP请求/响应及其标题,那么文件中的某些数据将是文本,但它不会都是文字.千万不要把它看成一个迹象表明它是,或者应该是一个文本文件.

但是,我希望在没有二进制文件的数据包数据本身(在同一文件中)之前显示数据包内容描述(运行tcpdump时通常显示在STDOUT上的内容).

分组数据本身二进制的!

如果你的意思是你想要一个文本十六进制转储的数据包数据,以一种形式,如

        0x0000:  0001 0800 0604 0001 0001 0000 0010 0a78
        0x0010:  0452 0000 0000 0000 0a78 0452 0101 0600
Run Code Online (Sandbox Code Playgroud)

在数据包描述之后,所以你看到的是这样的:

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
Run Code Online (Sandbox Code Playgroud)

那你应该这样做

tcpdump -c 100 -x >/root/tcpdump.txt
Run Code Online (Sandbox Code Playgroud)

这样tcpdump 的文本输出 - 你使用时得到的输出-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
Run Code Online (Sandbox Code Playgroud)

然后使用-xx而不是-x.