如何计算每分钟ARP应答报文?

时间:2018-12-31 16:10:59

标签: python scapy

我正在使用GNS3设置本地拓扑。因此,我正在使用HUB,因此情况是这样。网络中有5台计算机(计算机A,B,C,D,E) 并且计算机A必须计算网络中的ARP应答数据包。例如,计算机A可以检测到计算机B向计算机C发送ARP应答数据包1 /分钟。 假设计算机A是分析仪主机。

  1. 计算机B的IP为:192.168.1.2
  2. 计算机C的IP为:192.168.1.3
  3. 计算机D的IP为:192.168.1.4
  4. 计算机E的IP为:192.168.1.5

我在字典phyton中使用列表,代码是。

from scapy.all import *
reply=[]
reply.append({"src": " ", "dst" :" ","count": 0}]

def count_reply(paket): 
    for itung in reply:
        if itung['src']==paket['src'] and itung['dst']==paket['dst']:
            itung['count']+=1
            break       
        elif itung['src'] != paket['src'] and itung['dst'] != paket['dst']:
            reply.append(paket)
            paket['count']=1

def klasifikasi(pkt):
    # arp request
    if pkt[ARP].op == 2:
        returnpaket = {'src':pkt[ARP].psrc,'dst':pkt[ARP].pdst}
        return count_reply(returnpaket)

sniff(prn=klasifikasi, filter="arp", store=0)
print(reply)

然后我尝试将arp应答洪泛从计算机C发送到计算机B。发送的ARP应答数据包是7个数据包。我希望输出是 reply=[{'count':0, 'src':" ", 'dst':" "}, {'count':7, 'src':192.168.1.3, 'dst':192.168.1.2}但实际输出是

The Actual Output

我正在使用昨天在这里How to remove duplicate item in List?提出的解决方案来遵循代码 我该如何解决?请帮我这是我的家庭作业。谢谢。

1 个答案:

答案 0 :(得分:0)

结果中有多个条目的原因是,您的回复列表中已经有一个项目({“ src”:“”,“ dst”:“”,“ count”:0}),这导致您的代码将始终触发循环中的“ elif”部分(函数count_reply)。

在决定创建新条目或更新现有条目之前,应检查答复列表中的每个项目。

例如:

<Snack innerRef={ ref => this.snack = ref } />