我有分析tcpdump文件的数据。结果如下。
第一列是时间,按照src mac,dest_mac,src_ip& src_port和dest_ip_dest_ip。
我有从一个源ip到目标ip的数据,它出现在不同的行中,只有相同的信息,除了时间上差别不大。而不是显示所有这些信息,我想循环遍历文件,如果目标IP相同,记录开始时间和结束时间,采取差异并打印只有一行的差异。
目前的结果
03-23 00:37:28.174515 | 8ca982044d00 | c04a00332142 | 192.168.1.100 | 49671 | 180.149.153.11 | 80
03-23 00:37:28.174536 | 8ca982044d00 | c04a00332142 | 192.168.1.100 | 49671 | 180.149.153.11 | 80
03-23 00:41:36.422588 | 8ca982044d00 | c04a00332142 | 192.168.1.100 | 49672 | 180.149.153.11 | 80
03-23 00:44:18.584080 | 8ca982044d00 | c04a00332142 | 192.168.1.100 | 49671 | 180.149.153.11 | 80
03-23 00:44:22.588592 | 8ca982044d00 | c04a00332142 | 192.168.1.100 | 35660 | 180.149.134.61 | 80
03-23 00:45:12.636571 | 8ca982044d00 | c04a00332142 | 192.168.1.100 | 35661 | 180.149.134.61 | 80
我的期望:
(00:44:22 - 00:37:28) | 8ca982044d00 | c04a00332142 | 192.168.1.100 | 35661 | 180.149.134.61 | 80
我不指望你为我编写代码,但是一点点暗示会很有帮助
答案 0 :(得分:1)
这就是你如何构建数据来计算差异:
保留网络词典。这基本上可以是字典的字典,其中源ip是外部字典的键,而目标ip是外键的值和内部字典的键。内部字典的值可以是以开始时间作为其第一个元素的列表,结束时间作为此源IP目标IP对的第二个元素。即,
network[src][dest] = [start_time, end_time]
使用csv模块解析输入文件并按上述方式构建网络。
拥有网络后,您将拥有开始和结束日期/时间。您可以使用strprime()
和strftime()
方法计算差异。
然后使用csv模块将数据写入输出文件
下面的代码会查看您上面提供的数据,并构建我解释过的字典网络词典:
from pprint import pprint
import csv
network = {}
with open('file1') as input_file:
csv_reader = csv.reader(input_file, delimiter='|')
for row in csv_reader:
src = row[3].strip()
dest = row[5].strip()
if src not in network:
network[src] = {}
elif dest not in network[src]:
network[src][dest] = [row[0].strip(), row[0].strip()]
else:
network[src][dest][4] = row[0].strip()
pprint(network)
这给出了:
{'192.168.1.100': {'180.149.134.61': ['03-23 00:44:22.588592',
'03-23 00:45:12.636571'],
'180.149.153.11': ['03-23 00:37:28.174536',
'03-23 00:44:18.584080']}}
现在您已经组织了源和目标ips,其他步骤很简单。
希望这有帮助。