如何使用Python在网络转储中对数据包进行“时间片”?

2024-10-03 13:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

from scapy.all import *

pkts = rdpcap("/home/anadikrsna/Desktop/lalalao2.pcap")

somaMin = pkts[0].time + 600


valores=[]
for p in pkts:

    if p<=somaMin:
        #armazenando os valores que estiverem dentro do intervalo de tempo
        valores.append(p)

    else:


        print "os valores",valores

        valores=[]
        valores.append(p)
        somaMin=p.time+ 600
#

我试图在网络转储(PCAP)文件中“捕获”源IP和目标IP。这个想法是通过将文件切片10分钟(“时间片”)来保存所有源IP和所有目标IP。在

如何每10分钟“拆分”数据包,然后保存源IP和目标IP。在


Tags: 文件fromimportip目标hometimeos
1条回答
网友
1楼 · 发布于 2024-10-03 13:26:52

10分钟等于600秒。在

您只需从第一个数据包中减去当前的数据包时间,然后查看是否经过了10分钟(因为时间戳是以秒为单位的)。在

在pcap中每10分钟对数据包执行此操作。在

下面的代码将生成一个列表列表-每个子列表代表10分钟的数据包。在

packets = []
temp = []
t1 = pkts[0].time
t2 = 0
for p in pkts:
    t2 = p.time
    if (t2 - t1) > 600:
        t1 = p.time
        packets.append(temp)
        temp = []
        temp.append(p)
    else:
        temp.append(p)

然后,要处理每个子列表:

^{pr2}$

如果您想获得每个包的src和dest ip,我建议您在所有包上运行的第一个循环中执行。使用此选项可寻址第一个循环(for p in pkts)内的IP地址,并对其执行任何操作:

if IP in p: #if packet has IP layer
    src_ip = p[IP].src
    dest_ip = p[IP].dst

编辑-以上代码在for循环的每个循环中运行。如果要打印找到的所有src\u ip,首先在代码的开头初始化一个list-src_ip_addresses = []。然后,每次在包中找到IP层时,请执行以下操作:

^{4}$

在代码的最后,打印列表中的每个元素。在

相关问题 更多 >