如何计算每分钟的ARP应答包数?

2024-04-27 02:41:36 发布

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

我正在用GNS3建立一个本地拓扑。所以我在使用HUB,所以情况是这样的。网络中有5台计算机(计算机A、B、C、D、E) 而计算机则要对网络中的ARP应答包进行计数。例如,计算机A可以检测到计算机B向计算机C发送ARP应答包1/分钟。 假设一台计算机是一台分析主机。你知道吗

  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

我使用字典里的列表,代码是。你知道吗

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? 我该怎么解决?请帮帮我这是我的家庭作业。非常感谢。你知道吗


Tags: 代码ip网络srcdefcount计算机reply
1条回答
网友
1楼 · 发布于 2024-04-27 02:41:36

结果中出现多个条目的原因是,应答列表中已经有一个条目({“src”:“,”dst”:“,”count“:0}),这会导致代码始终触发循环中的“elif”部分(函数count\u reply)。你知道吗

在决定创建新条目或更新现有条目之前,您应该检查回复列表中的每个条目。你知道吗

例如:

def count_reply(paket):
    if len(reply)==0:
        paket['count'] = 1
        reply.append(paket)
        found = True
    else:
        found = False
        for itung in reply:
            if itung['src']==paket['src'] and itung['dst']==paket['dst']:
                itung['count']+=1
                found = True
                break
    if not found:
        reply.append(paket)
        paket['count']=1

相关问题 更多 >