【发布时间】:2018-03-08 20:08:45
【问题描述】:
我正在尝试编写一个 Python 脚本来使用 Tshark 嗅探网络流量并保存到 .pcap 和 .csv 文件。
我一直手动运行tcpdump –W 5 –C 500 –w normaltraffic
捕获数据包并将No.、Time、Source、Destination、Protocol、Length、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')
【问题讨论】:
-
在文件名中加上时间戳。您可以使用
str.format()方法将时间代入命令行。 -
@Barmar 我在描述中添加了另一个尝试 - 这是你的意思吗?对不起,编程新手
-
这里真正想要完成什么?如果您每 5 分钟启动一次
tshark,您最终会运行许多实例。你的停止条件是什么? 也许您想要做的是使用环形缓冲区,指定应该每 5 分钟创建一个新文件?关闭文件并启动新文件后,您需要将数据包数据从 pcap 文件导出到 csv,每个 csv 将有 5 分钟的数据。类似:tshark i 2 -b duration:300 -w Data.pcap(查看wireshark.org/docs/man-pages/tshark.html 了解更多信息。) -
您需要多解释一下您要做什么...您是否尝试多次午餐 tshark 并且基本上多次捕获相同的流量?或者可能有一只 tshark 每 5 分钟收集一次样本?样本是否小于 5 分钟,例如每 5 分钟收集 30 秒,或者您是否试图捕获所有内容(每 5 分钟收集 5 分钟?)
-
@ntg Christopher Maynard 我正在尝试创建一个 python 脚本,它将运行 tshark x 分钟,并将输出保存为 .pcap 文件和 .csv 文件。我希望使用日期和时间来命名输出文件。保存文件后,脚本应再次重复该过程,直到手动停止脚本。