我在redhat服务器上有一个tcpdump
进程,它不断地从其NIC
捕获流量。tcpdump每1MB启动一个新的捕获文件。捕获文件可以通过samba共享访问。
我正在编写一个python脚本,从共享中读取并处理pcap
文件。
问题是tcpdump没有锁定当前正在写入的文件(肯定是tcpdump而不是samba服务器)。因此,当我的脚本开始处理文件时,我不知道该文件是否仍在被写入。此外,tcpdump
可以突然关闭,因此我不希望将文件大小作为指示器。
最佳答案
那os.path.getmtime
呢?这可以用来获得最后一次修改的时间。
或者您可以将流从tcpdump管道传输到您自己的进程,该进程将数据传输到您自己的文件和缓冲区。tee
一些脚本或类似的东西:
import fileinput
import sys
from tempfile import SpooledTemporaryFile
s = SpooledTemporaryFile(max_size=1024, prefix='saves_', dir='/some/dir')
for line in fileinput.input(sys.argv[1:]):
# write to spooled buffer
s.write(line)
# tee back to stdout
sys.stdout.write(line)
tcpdump | python some_script.py
创建缓冲区。SpooledTemporaryFile
可以从fileinput.input
读取,也可以获取文件列表,如:stdin
。。。或者python some_script.py /some/file.input.txt
tcpdump | python some_script.py
用于将文件作为列表获取(如果已列出)。关于python - 使用脚本收听tcpdump输出pcaps,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43617155/