Per*_*sen 5 sniffing pcap wireshark tshark
我有连续生成的pcap文件给我.它想要不断地将它们送到"永远在线"的tshark/wireshark.这是我尝试过的(OSX)
mkfifo tsharkin
tail -f -c +0 tsharkin | tshark -l -i - > tsharkout 2>stderr &
cat file1.pcap > tsharkin
Run Code Online (Sandbox Code Playgroud)
以上工作正常,我从tsharkout中的file1.pcap得到预期的输出
cat file2.pcap > tsharkin
Run Code Online (Sandbox Code Playgroud)
以上不起作用,我在tsharkout中什么都没得到,但是我在stderr中得到"1包丢弃"+"3包捕获"
cat file2.pcap > tsharkin
Run Code Online (Sandbox Code Playgroud)
再次尝试使tail/tshark进程停止/崩溃
我尝试再次这样做,但这次先使用file2.pcap然后再使用file1.pcap.这次file2.pcap处理得很好,file1.pcap使tail/tshark进程停止/崩溃.因此,我将得出结论,两个pcap文件没有任何问题,但似乎tshark不喜欢抛出多个pcap文件.
为了测试它,我尝试首先使用mergecap合并file1.pcap和file2.pcap,然后将其输入到tshark
mergecap -F pcap -w file1_2.pcap file1.pcap file2.pcap
cat file1_2.pcap > tsharkin
Run Code Online (Sandbox Code Playgroud)
这工作正常,我得到tsharkout中file1.pcap和file2.pcap的预期输出
问题是我的pcap文件一路走来,所以我不能在将它们全部合并到tshark之前.我需要能够在pcap文件到达时将其提供给"永远运行"的tshark.我怎样才能做到这一点?
TL;博士。libpcap 文件有一个标头。您需要为第二个及后续捕获文件删除它:
\n\ncat file2.pcap | tail -c +25 > tsharkin\nRun Code Online (Sandbox Code Playgroud)\n\n当向 tshark 提供两次相同文件时,我的输出:
\n\n1 0.000000 10.0.0.1 \xe2\x86\x92 10.0.0.2 TLSv1.2 246 Application Data\n2 0.058816 10.0.0.2 \xe2\x86\x92 10.0.0.1 TCP 66 443 \xe2\x86\x92 58616 [ACK] Seq=1 Ack=181 Win=1701 Len=0 TSval=3578216450 TSecr=5878499\n\n3 0.000000 10.0.0.1 \xe2\x86\x92 10.0.0.2 TLSv1.2 246 [TCP Spurious Retransmission] , Application Data\n4 0.058816 10.0.0.2 \xe2\x86\x92 10.0.0.1 TCP 66 443 \xe2\x86\x92 58616 [ACK] Seq=1 Ack=181 Win=1701 Len=0 TSval=3578216450 TSecr=5878499\nRun Code Online (Sandbox Code Playgroud)\n\n细节
\n\n正如libpcap 格式的文档中所解释的,libpcap 文件有一个24 字节的全局标头。该全局标头后面直接跟着数据包(带有自己的 libpcap 标头),无需填充。
\n\n因此,当将 libpcap 文件提供给 tshark 时,第一个文件可以正常工作,因为 tshark 需要全局标头。然而,它并不期望您提供给它的后续文件有一个。这可能会导致 tshark 将第二个文件的开头(实际上又是一个全局标头)视为格式错误的数据包并丢弃它(“1 个数据包已丢弃”)。我不知道为什么 tshark 在第三个文件处停止。
\n\n如果您确定所有捕获文件都具有相同的格式(注意 pcapng 文件)和相同的标头,则您可以安全地删除第二个文件(以及后续文件)的全局标头,然后再将它们发送到您的指定文件管道。一种方法是使用您在问题中已使用的尾部语法:
\n\ntail -c +startoffset file\nRun Code Online (Sandbox Code Playgroud)\n\n全局标头有 24 个字节长,我们希望从第 25 个字节开始读取捕获文件。
\n\n请注意同一标头。如果所有捕获文件都以相同的方式检索,它们可能具有相同的全局标头。特别是,物理层协议(例如以太网)需要相同。该全局标头还包含格式版本(例如2.4)、时区和数据包的最大捕获长度。
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |