首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连续地将pcap文件提供给tshark/wireshark

连续地将pcap文件提供给tshark/wireshark
EN

Stack Overflow用户
提问于 2016-11-11 10:42:40
回答 1查看 1.6K关注 0票数 6

我有不断生成的pcap给我。它想要不断地把它们喂给一个“永远运行的”tshark/wireshark。以下是我尝试过的(OSX)

代码语言:javascript
复制
mkfifo tsharkin
tail -f -c +0 tsharkin | tshark -l -i - > tsharkout 2>stderr &
cat file1.pcap > tsharkin

上面的操作很好,我在tsharkout中获得了file1.pcapd的预期输出。

代码语言:javascript
复制
cat file2.pcap > tsharkin

以上内容不起作用,我在tsharkout中什么也得不到,但是我得到了stderr中的"1包丢弃“+ "3包捕获”。

代码语言:javascript
复制
cat file2.pcap > tsharkin

再次尝试会使尾部/tshark进程停止/崩溃。

我又试了一次,但这一次先使用file2.pcap,然后使用file1.pcap。这一次,file2.pcapd处理得很好,file1.pcape使尾/tshark进程停止/崩溃。因此,我将得出结论,这两个pcap没有什么问题,但似乎tshark不喜欢将多个pcap抛到它身上。

为了测试它,我尝试先使用mergecap合并file1.pcapandfile2.pcapp,并将其输入tshark

代码语言:javascript
复制
mergecap -F pcap -w file1_2.pcap file1.pcap file2.pcap
cat file1_2.pcap > tsharkin

这很好,我在tsharkout中获得了file1.pcapandfile2.pcapout的预期输出。

问题是,我的pcap到达途中,所以我不能只是合并它们之前,喂给tshark。当pcap到达时,我需要能够将它们喂给一个“永远运行”的t鲨。我怎么能这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-19 16:51:55

TL;DR.. libpcap有标题。您需要为第二个和随后的捕获文件删除它:

代码语言:javascript
复制
cat file2.pcap | tail -c +25 > tsharkin

我的输出,当喂食同一文件的两倍时:

代码语言:javascript
复制
1   0.000000 10.0.0.1 → 10.0.0.2 TLSv1.2 246 Application Data
2   0.058816 10.0.0.2 → 10.0.0.1 TCP 66 443 → 58616 [ACK] Seq=1 Ack=181 Win=1701 Len=0 TSval=3578216450 TSecr=5878499

3   0.000000 10.0.0.1 → 10.0.0.2 TLSv1.2 246 [TCP Spurious Retransmission] , Application Data
4   0.058816 10.0.0.2 → 10.0.0.1 TCP 66 443 → 58616 [ACK] Seq=1 Ack=181 Win=1701 Len=0 TSval=3578216450 TSecr=5878499

详细信息

正如在libpcap格式的文档中所解释的,libpcap有一个24字节全局头。这个全局标头后面直接跟着没有填充的数据包(带有他们自己的libpcap头)。

因此,当将libpcap文件提供给t鲨时,第一个文件工作得很好,因为t鲨需要一个全局头。但是,它并不期望为后续的文件提供数据。这可能会导致tshark将第二个文件(实际上是一个全局头文件)的开头视为格式错误的数据包,并将其丢弃("1数据包丢弃“)。我不知道为什么要停止处理第三个文件。

如果您确信所有捕获文件都具有相同格式的(注意pcapng文件)和相同头,那么在将它们发送到指定管道之前,您可以安全地删除第二个文件(和后续文件)的全局头。这样做的一种方法是使用在您的问题中已经使用的尾语法:

代码语言:javascript
复制
tail -c +startoffset file

全局头长为24字节,我们希望开始读取25字节的捕获文件。

相同header.上的注释--如果所有捕获文件都以相同的方式检索,它们可能具有相同的全局头。特别是,物理层协议(例如以太网)需要是相同的。该全局报头还包含格式的版本(例如,2.4)、时区和数据包的最大捕获长度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40546271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档