我正在尝试使用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()