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

时间:2015-05-20 15:19:36

标签: unix tcpdump

我希望将数据包内容描述和数据包数据捕获到tcpdump的文件中,以便以后检查。

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

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

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

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

  1. 数据包内容说明
  2. 分组数据
  3. 我要保存到文件的示例:

    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 -->
    

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

    有人可以建议怎么做吗?

1 个答案:

答案 0 :(得分:7)

  

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

如果您使用名称以-w结尾的.txt,则会误解-w的内容。

-w以pcap格式写出完全二进制文件,该文件旨在由tcpdump或其他程序(如Wireshark, NOT < / em> 由人类直接阅读!

IF 数据包在某个层上带有基于文本的协议,例如FTP控制协议,SMTP或HTTP请求/响应及其标题,然后 某些 文件中的数据将是文本,但 NOT 都是文本。 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