将所有 pcap 文件转换为包含所需列的 csv python

Convert all pcap file to csv with required columns python

我需要将所有输出的 CSV 文件写入不同的文件夹。例如,如果 .pcap 个文件位于子文件夹 Sub1Sub2 中。而 Sub1a1.pcapa2.pcap。 Sub2 有 b1.pcapb2.pcap

我需要将输出的 CSV 文件写入与上述名称相同的文件夹中。 Sub1Sub2,那么Sub1应该有a1.csva2.csvSub2 应该有 b1.csvb2.csv

请问我该怎么做?

我收到以下错误:

outputdir = startdir / "Outcsv"
TypeError: unsupported operand type(s) for /: 'str' and 'str'

密码是:

import os
startdir= '/root/Desktop/TTT'
suffix= '.pcap'
outputdir = startdir / "Outcsv"

for root,dirs, files, in os.walk(startdir):
    for name in files:
        if name.endswith(suffix):
            filename = os.path.join(root,name)
            output_filename = outputdir / filename.relative_to(startdir)
            cmd = 'tshark -r {} -T fields -e frame.number -e frame.time_relative -e wlan.sa -e wlan.da -e wlan.ta -e wlan.ra -e frame.time_delta_displayed -e frame.len -E header=y -E separator=, -E quote=d -E occurrence=f > {}.csv'
            final_cmd = cmd.format(filename, output_filename)
            os.system(final_cmd)

调用 tshark,(类似这样)

f_in = 'x.pcap'
f_out = 'x.csv'
tshark_template = 'tshark -r {} -T fields -e frame.number -e frame.time -e eth.src -e eth.dst -e ip.src -e ip.dst -e ip.proto -E header=y -E separator=, -E quote=d -E occurrence=f > {}'
final_tshark_cmd = tshark_template.format(f_in,f_out)

使用 python 动态构建命令,因此您可以控制文件的名称。

每个 -e 代表您希望在输出中的一个字段。

如果您尝试在其他位置重新创建文件夹结构,则需要确保已创建文件夹。这可以使用 os.makedirs() 命令来完成。可以使用比 startdir 更深的任何路径来确定子文件夹结构。然后可以将其附加到您的 outputdir 位置。

文件扩展名也可以用os.path.splitext()替换。

例如:

import os

startdir = '/root/Desktop/TTT'
suffix= '.pcap'
outputdir = os.path.join(startdir, "Outcsv")

for root, dirs, files, in os.walk(startdir):
    for name in files:
        if name.lower().endswith(suffix):
            sub_folders = root[len(startdir)+1:]

            input_filename = os.path.join(root, name)
            output_path = os.path.join(outputdir, sub_folders)
            os.makedirs(output_path, exist_ok=True)  # Ensure the output folder exists
            output_filename = os.path.join(output_path, os.path.splitext(name)[0] + '.csv')

            cmd = 'tshark -r {} -T fields -e frame.number -e frame.time_relative -e wlan.sa -e wlan.da -e wlan.ta -e wlan.ra -e frame.time_delta_displayed -e frame.len -E header=y -E separator=, -E quote=d -E occurrence=f > {}'
            final_cmd = cmd.format(input_filename, output_filename)

            print(final_cmd)
            os.system(final_cmd)