我需要连续读取pcap捕获程序记录的pcap文件。
tcpdump -i eth0 -w foo.pcap
tcpstat -r foo.pcap -o "pps: %p\n" 1
举个例子,假设我用上面的tcpdump命令记录了一个pcap,并试图用tcpstat读取。这里,tcpstat正在执行当前的foo.pcap并完成它的工作。我想要的是让它等待新的包并处理它们。你可以认为这是一个tailf命令,但读取的是pcap而不是文本文件。
请注意,这里tcpdump和tcpstat只有2个读取器和写入器进程的示例。它们可以是任何其他程序。还要注意,读取器进程可以不止一个。实现这一点的最佳方法是什么?
3条答案
按热度按时间kkih6yb81#
忽略
pcap
的东西(见文章结尾)开始,并回答一般问题:...这里tcpdump和tcpstat只是两个读取器和写入器进程的例子。它们可以是任何其他程序。还要注意,读取器进程可以不止一个。实现这一点的最佳方法是什么?
一个作者多个读者的问题。
Bash中最好的解决方案是什么?可能是
tail -F my.log
文件,示例:还有
tee
,但它写多个文件,而不是多个进程。我想你可以设置一堆管道到进程并使用tee。注意,如果你想要一个更高质量的解决方案,Bash中有很多更好的解决方案 * 不是 *,你可能想使用它们。
tail
和UNIX管道的一个普遍问题是它们是面向流的,你可能想要一个面向消息的流。UNIX消息队列,队列服务器,或者套接字可以帮助你。pcap
案例tail -F
不起作用,因为pcap file format有一个头,你不能像tail -F那样从文件的结尾开始阅读。你需要从头到尾读取整个文件,然后开始拖尾。tail
的-n
选项可以做到这一点:dy1byipe2#
tcpstat可以从stdin读取数据:-r filename从filename读取所有数据,filename可以是常规文件,命名管道或“-”从标准输入读取其数据。因此:
此外,您可以在不同的终端窗口中运行此命令
62lalag43#
你需要通过“-n+0 -c+1”来增强你的尾部参数。下面应该可以做到:
-n+0 =开始从文件的第一行开始读取(加上从开始的0行偏移)
-c+1 ==在输出中添加额外的字节