我想将数据包内容描述和数据包数据捕获到一个文件中,tcpdump以备日后检查.
目前我正在使用-w选项将数据包数据保存到文件:
tcpdump -c 100 -w /root/tcpdump.txt
Run Code Online (Sandbox Code Playgroud)
这将分组数据保存到文件中,但在每个分组之前还包括几行二进制.但是,我希望tcpdump在没有二进制文件的数据包数据本身(在同一文件中)之前显示数据包内容描述(运行时通常显示在STDOUT上的内容).
因此该文件应为每个数据包保存以下内容:
我想要保存到文件的示例:
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.