Python脚本迭代具有不同的名称输出



我正在尝试使用tshark编写一个python脚本来嗅探网络流量并保存到.pcap和.csv文件。

我一直在手动运行tcpdump –W 5 –C 500 –w normaltraffic

捕获数据包和输出字段 no。,时间,源,目标,协议,长度,info 中的.CSV文件。-c告诉tcpdump最多可节省5个文件,覆盖最旧的文件,-W规定最大文件为500mb。

我希望使用Python脚本和TSHARK将相同的字段输出到CSV文件,该字段将每5分钟运行一次,并每次保存新文件。不再需要5个迭代限制和500MB大小。

要每5分钟迭代脚本,我想我可以写一个Linux cron作业,但是如何将以下内容更改为每次输出到新文件(也许使用日期邮票作为名称(。我想要的最终结果是每5分钟运行一次Python脚本,并将所有.pcap和.csv文件保存在文件夹中。

import os
os.system("tshark i 2 -T fields -e frame.time -e eth.src -e eth.dst -e ip.src -e ip.dst -e ip.proto -e tcp.len -e _ws.col.Info -w Data.pcap > Data.csv")

任何帮助将不胜感激!

@barmar你是说这样的吗?

import os
from datetime import datetime

os.system("tshark i 2 -T fields -e frame.time -e eth.src -e eth.dst -e ip.src -e ip.dst -e ip.proto -e tcp.len -e _ws.col.Info -w Data.pcap > Data.csv")
sys.stdout = open(‘Data.csv’, 'w')
capture = datetime.now().strftime("%Y%m%d-%H%M%S")
sys.stdout = open(capture + ‘.csv’, 'w')

@mikael-rousson看起来像这个

import os
from datetime import datetime
from threading import Timer
sniff=threading.Timer(600, os.system("tshark i 2 -T fields -e frame.time -e eth.src -e eth.dst -e ip.src -e ip.dst -e ip.proto -e tcp.len -e _ws.col.Info -w Data.pcap > Data.csv"))  
while True:
    sniff.start()
    sys.stdout = open(‘Data.csv’, 'w')
    capture = datetime.now().strftime("%Y%m%d-%H%M%S")
    sys.stdout = open(capture + ‘.csv’, 'w')

一个选项是从Python中的threading模块中使用Timer。它可以在n秒后运行一个操作: threading.Timer(n, action)

https://docs.python.org/3/library/threading.html

对于您的任务,您可以使用这样的递归调用(当心最大递归极限python(:

import os
from datetime import datetime
from threading import Timer
def sniff(interval=600):
    os.system("tshark i 2 -T fields -e frame.time -e eth.src -e eth.dst -e ip.src -e ip.dst -e ip.proto -e tcp.len -e _ws.col.Info -w Data.pcap > Data_{}.csv".format(datetime.now()))
    Timer(interval, sniff).start()
sniff()

最新更新