【问题标题】:How to get tcpdump to save to a file without using binary?如何在不使用二进制文件的情况下让 tcpdump 保存到文件?
【发布时间】:2015-05-21 03:20:24
【问题描述】:

我想将数据包内容描述和数据包数据捕获到带有tcpdump 的文件中以供以后检查。

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

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

这会将数据包数据保存到文件中,但在每个数据包之前还包含几行二进制文件。但是,我希望在没有二进制文件的数据包数据本身(在同一文件中)之前显示数据包内容描述(运行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 -->

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

谁能建议如何做到这一点?

【问题讨论】:

    标签: unix tcpdump


    【解决方案1】:

    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

    【讨论】:

    • 我要做的是在服务器上的用户泛洪/攻击远程目标(例如,发送 UDP 泛洪的 PHP 外壳)的情况下将数据包数据捕获到文件中。我们希望保存少量数据作为证据,以便在此类事件发生后进行分析,以确定发生了什么以及如何预防。在这方面你会建议什么命令?
    • 分析是由“谁”还是“什么”来完成的?即,是让人类自己读取输出的意图还是让程序读取数据(tcpdump、Wireshark 或其他程序)的意图?如果要让人类阅读它,请使用不带 -w 的 tcpdump 和带 -x 的输出重定向,这样你就有一个文本文件而不是二进制文件。如果要让程序读取它,请使用 -w 并写入一个二进制文件,稍后其他程序将读取它。
    • 事件发生后将由人工进行分析。我刚刚尝试使用 -x 选项,但它保存了似乎很多十六进制数据。是否可以让它保存网络中的任何内容(例如 HTML、文本等),以便我们可以读取它而不是十六进制?
    • “我刚刚尝试使用 -x 选项,但它保存了看起来很多十六进制数据。”是的,这就是我所说的。
    • “是否可以让它保存网络中的任何内容(例如 HTML、文本等),以便我们可以读取它而不是十六进制?” “无论发生什么”WILL 包括一些二进制数据,所以如果你想保存任何正在发生的事情,你 WILL 保存不易被人类阅读的二进制数据——不可能得到其他任何东西。十六进制数据是原始二进制数据内容的文本形式的转储,例如33008 的大端 32 位值将是 0000 80F0。如果您尝试以文本形式读取文件,它将看起来像垃圾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2011-01-27
    • 2017-02-07
    • 2011-03-08
    • 2010-09-08
    • 2020-04-08
    • 2011-07-10
    相关资源
    最近更新 更多