0

我在一个文件夹中有大约 3500 个 nfcapd 格式的文件的 NetFlow 数据。我需要将所有文件转换为 .csv 格式以执行数据预处理和特征提取。

我尝试使用下面的 nfdump 命令将每个 nfcapd 文件单独转换为 .csv 文件,并且成功运行。

nfdump -r /var/cache/nfdump/nfcapd.202109040450 -o csv > netflow_csv/nfcapd202109040450.csv

但是,将所有 3500 多个 nfcapd 文件单独转换为 .csv 格式是一项繁琐的任务。因此,我尝试了一些使用“子进程”循环进入文件夹并将所有 nfcapd 文件转换为 .csv 文件并将其保存在另一个文件夹中的 python 脚本。我使用了下面的代码:

startdir= '/content/sample_data/netflowdata'
outdir = '/content/sample_data'
suffix= '.csv'

def decode_to_file(cmd, in_file, new_suffix):
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    fileName = outdir + '/' + in_file[len(startdir):-len(suffix)] + ".csv"
    os.makedirs(os.path.dirname(fileName), exist_ok=True)
    csv_writer = csv.writer(open(fileName, 'w'))
    for line_bytes in proc.stdout:
        line_str = line_bytes.decode('utf-8')
        csv_writer.writerow(line_str.strip().split(','))

for root,dirs, files, in os.walk(startdir):
    for name in files:
        if name.endswith(suffix):
            continue
        in_file=os.path.join(root,name)
        out_file = outdir + '/' + in_file[len(startdir):-len(suffix)] + ".csv"
        # cmd = 'tshark -r "{}" -T fields -e frame.time_delta_displayed -e frame.len -e wlan.sa - e wlan.da _E separator=, _E header=y > "{}"'.format(in_file, out_file)
        cmd = 'nfdump -r "{}" -o csv > "{}"'.format(in_file, out_file)
        csv_writer = csv.writer(open(out_file, 'w'))
        print (cmd)
        os.system(cmd)

我得到以下输出:

nfdump -r "/content/sample_data/netflowdata/nfcapd.202107310935" -o csv > "/content/sample_data//nfcapd.20210731.csv"
nfdump -r "/content/sample_data/netflowdata/nfcapd.202107310920" -o csv > "/content/sample_data//nfcapd.20210731.csv"
nfdump -r "/content/sample_data/netflowdata/nfcapd.202107310930" -o csv > "/content/sample_data//nfcapd.20210731.csv"
nfdump -r "/content/sample_data/netflowdata/nfcapd.202107310925" -o csv > "/content/sample_data//nfcapd.20210731.csv"
nfdump -r "/content/sample_data/netflowdata/nfcapd.202107310940" -o csv > "/content/sample_data//nfcapd.20210731.csv"

在试用版中,我只尝试了 5 个文件。但是脚本不起作用。我得到空的 .csv 文件。上面的脚本有什么需要修改的吗?或者是否有其他一些包,如“Scapy”,我应该使用它来将文件夹中的多个 nfcapd 文件转换为 .csv 文件?

4

0 回答 0