enter image description here wireshark .pcap文件很少。我需要将每个.pcap分隔为传入和传出流量(通过提供源和目标mac地址),并且这些分离的文件必须写入两个不同的文件夹,即“传入”和“传出”。输出文件(作为传入和传出分隔的文件)必须具有与输入文件相同的名称,并且需要写入.csv文件。我尝试了以下代码,但无法正常工作。任何帮助是极大的赞赏。谢谢
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("folder1/1.json");
答案 0 :(得分:0)
正确的实现可能更像:
import csv
import os
import subprocess
startdir = 'in.d' # obviously, people other than you won't have /root/Desktop/test
outdir = 'out.d'
suffix = '.pcap'
def decode_to_file(cmd, in_file, new_suffix):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
fileName = outdir + '/' + in_file[len(startdir):-len(suffix)] + new_suffix
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 not name.endswith(suffix):
continue
in_file = os.path.join(root, name)
cmdCommon = [
'tshark', '-r', in_file,
'-T', 'fields',
'-e', 'frame.time_delta_displayed',
'-e', 'frame.len',
'-E', 'separator=,',
'-E', 'header=y',
]
decode_to_file(
cmd=cmdCommon + ['-Y', 'wlan.sa==00:00:00:00:00:00 && wlan.da==11:11:11:11:11:11'],
in_file=in_file,
new_suffix='.out.csv'
)
decode_to_file(
cmd=cmdCommon + ['-Y', 'wlan.sa==11:11:11:11:11:11 && wlan.da==00:00:00:00:00:00'],
in_file=in_file,
new_suffix='.in.csv'
)
注意:
os.system()
。 (这永远不会起作用,因为它会返回数字退出状态,而不是可以写入CSV文件的格式的字符串)。tshark
子流程的标准输出中读取Python代码。.out.csv
和.in.csv
替换其扩展名来构造输出文件名。writerow()
需要迭代,因此我们可以通过按行拆分来生成一个。请注意,由于fields
的输出似乎已经是CSV,因此我还不清楚您为什么要使用Python CSV模块,因此也可以将输出直接重定向到具有没有其他处理。