我正在开发一个程序,其中 .pcap 文件将作为输入。但是,当我在终端中运行 tcpdump -w someFile.pcap 时,.pcap 文件会捕获额外的数据,例如时间戳、微秒、帧长度等。
这些额外的数据妨碍了我的程序,我想知道是否有办法让 tcpdump 只捕获原始数据包而不捕获其他内容。
例如,.pcap 中的第一个数据字节应该是以太网报头的“目标地址”,而不是某个时间戳。
谢谢!
答案1
听起来你只对组成每个数据包的原始字节感兴趣。假设如此,你可以尝试以下方法:
tcpdump -r someFile.pcap -xx | grep -P "^\t0x"
正如你所看到的tcpdump
手册页,这将导致tcpdump
读取捕获文件,并且“除了打印每个数据包的标题外,还打印每个数据包的数据,包括其链接级别标题(十六进制)。” 将输出管道化到grep
负责删除摘要行。也许有一种方法可以指示tcpdump
不是打印摘要行,但如果有的话,我找不到它。无论如何,此时,您只需要处理十六进制输出。
我认为你也可以通过使用更轻松地实现这一点tshark
而不是tcpdump
。例如:
tshark -r icmp.pcap -x
tcpdump
和的输出格式tshark
在十六进制值的显示和分组方式以及十六进制值后面是否存在十六进制字节的 ASCII 表示方面确实有所不同,因此您可能需要进行试验以查看您更喜欢哪种格式或者哪种格式更容易让您的程序解析。