我正试图编写一个程序,该程序需要一个pcap文件,通过应用程序tshark过滤数据包数据,并将数据输出到字典中,将各个数据包分开。我在分离部分遇到问题。如何有效分离不同大小的数据输入?
这里基本上是我到目前为止有:
#example data input
records = ["Jamie,20,12/09/1997,Henry,15,05/12/2002,Harriot,22,11/02/1995"]
dict = {}
list1 = str(records).split(',')
i = 0
#seperates list into sublists with length "3"
list1 = [list1[i:i + 3] for i in range(0, len(list1), 3)]
#places the sublists into a dictionary
for i in range (0,len(fields)): #places the sublists into dictionary
dict[i] = list1[i][0].split(',') + list1[i][1].split(',') + list1[i][2].split(',')
print(dict)
输出看起来是这样的:
{0: ["['Jamie", '20', '12/09/1997'], 1: ['Henry', '15', '05/12/2002'], 2: ['Harriot', '22', "11/02/1995']"]}
我明白我的代码是相当有缺陷和混乱。为了存储从每一行获取更多数据,您需要手动将每个附加字段添加到字典中,同时必须更改将列表拆分到哪里。任何帮助如何更好地自动化这个过程,考虑到不同规模的输入,将不胜感激。如果我解释我的问题不好,就问。
编辑:这里是我用来调用tshark的代码。前面代码的输入是“out”转换为字符串。上例中的姓名,年龄和出生日期代表IP源,IP目的地和协议。
filters = ["-e","ip.src"," -e ","ip.dst"," -e ","_ws.col.Protocol] #Specifies the metadeta to be extracted
tsharkCall = ["tshark.exe", "-r", inputpcap, "-T", "fields", filters]
tsharkProc = subprocess.Popen(tsharkCall, stdout=subprocess.PIPE)
out, err= tsharkProc.communicate()
试试'lst = records [0] .split(',')'。不要调用你的列表'list',因为这是一个python内置的。但是目前,在分割它之前,您需要将1项目列表转换为其字符串表示形式。除此之外,我不确定你在问什么。什么是“田地”? – roganjosh
你会总是有包含三行数据的字符串吗?还是仅仅是这个例子? – scnerd
有没有什么办法可以为每一行获取不同的分隔符,比如'\ n'而不是'','? – scnerd