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

Unix 如何让tcpdump在不使用二进制文件的情况下保存到文件中?,unix,tcpdump,Unix,Tcpdump,我想用tcpdump将数据包内容描述和数据包数据捕获到一个文件中,以便以后检查 目前,我正在使用-w选项将数据包数据保存到文件: tcpdump -c 100 -w /root/tcpdump.txt 这将数据包数据保存到文件中,但在每个数据包之前还包括几行二进制代码。但是,我希望在包数据本身(在同一文件中)之前显示包内容描述(在运行tcpdump时通常在STDOUT上显示),而不显示二进制文件 因此,文件应为每个数据包保存以下内容: 包内容描述 分组数据 我要保存到文件的内容示例: 17:1

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

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

tcpdump -c 100 -w /root/tcpdump.txt
这将数据包数据保存到文件中,但在每个数据包之前还包括几行二进制代码。但是,我希望在包数据本身(在同一文件中)之前显示包内容描述(在运行
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 -->
    
    17:17:42.847059 IP some.server.com.17845>some.host.net.55618:Flags[P.],seq 137568:137888,ack 1185,win 167,长度320
    
    此信息将用于以后的文件分析,以便我们可以查看发送到特定主机/地址的完整数据包

    有人能建议怎么做吗

    tcpdump-c100-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
    
    在数据包描述之后,您看到的是这样的:

    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的文本输出(当您不使用
    -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

    我想做的是在服务器上的用户淹没/攻击远程目标(例如PHP外壳发送UDP淹没)时将数据包捕获到文件中。我们希望保存少量数据作为证据,以便在此类事件发生后进行分析,以确定发生了什么以及如何预防。在这方面,你会建议什么命令?分析是由“谁”还是“什么”来完成?也就是说,是让人自己读取输出,还是让程序读取数据(tcpdump、Wireshark或其他程序)?如果要让人读取,请使用不带-w的tcpdump和带-x的tcpdump并重定向输出,这样您就有了一个文本文件而不是二进制文件。如果要让一个程序读取,请使用-w并写入一个二进制文件,该文件稍后将被其他程序读取。事件发生后,将由人工进行分析。我刚刚尝试使用-x选项,但它保存了大量十六进制数据。有没有可能让它保存正在传输的内容(如HTML、文本等),这样我们就可以读取它而不是十六进制?“我刚刚尝试了-x选项,但它保存了大量的十六进制数据。”是的,这就是我所说的。有可能让它保存正在传输的内容(如HTML、文本等)吗所以我们可以读取它,而不是十六进制?“任何正在传输的东西”都会包含一些二进制数据,所以如果你想保存任何正在传输的东西,你将保存不容易被人类读取的二进制数据——不可能得到任何其他东西。十六进制数据是原始二进制数据内容的文本形式转储,例如33008的大端32位值将为0000 80F0。如果你试图读取一个文本文件,它看起来就像垃圾。