如何统计每分钟的ARP回复包数?
How to count ARP reply packet per minute?
我正在使用 GNS3 设置本地拓扑。所以我正在使用 HUB,所以场景是。网络中有5台电脑(电脑A、B、C、D、E)
并且计算机A必须统计网络中的ARP应答包。例如计算机A 可以检测到计算机B 向计算机C 发送ARP 回复数据包1/分钟。
假设计算机 A 是分析器主机。
- 计算机 B 的 Ip:192.168.1.2
- 电脑C有一个Ip:192.168.1.3
- 电脑D的Ip:192.168.1.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)
并且我尝试从计算机 C 向计算机 B 发送 arp 回复泛洪。发送的 ARP 回复数据包是 7 个数据包。我预计输出是
reply=[{'count':0, 'src':" ", 'dst':" "}, {'count':7, 'src':192.168.1.3, 'dst':192.168.1.2}
但实际输出是
我正在使用我昨天在此处询问的解决方案来遵循代码
我该如何解决?请帮助我这是我的作业。谢谢。
您的结果中出现多个条目的原因是,您的回复列表中已有一个项目 ({"src": " ", "dst" :" ","count": 0}),这会导致您的代码始终触发循环中的 "elif" 部分(函数 count_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
我正在使用 GNS3 设置本地拓扑。所以我正在使用 HUB,所以场景是。网络中有5台电脑(电脑A、B、C、D、E) 并且计算机A必须统计网络中的ARP应答包。例如计算机A 可以检测到计算机B 向计算机C 发送ARP 回复数据包1/分钟。 假设计算机 A 是分析器主机。
- 计算机 B 的 Ip:192.168.1.2
- 电脑C有一个Ip:192.168.1.3
- 电脑D的Ip:192.168.1.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)
并且我尝试从计算机 C 向计算机 B 发送 arp 回复泛洪。发送的 ARP 回复数据包是 7 个数据包。我预计输出是
reply=[{'count':0, 'src':" ", 'dst':" "}, {'count':7, 'src':192.168.1.3, 'dst':192.168.1.2}
但实际输出是
我正在使用我昨天在此处询问的解决方案来遵循代码
您的结果中出现多个条目的原因是,您的回复列表中已有一个项目 ({"src": " ", "dst" :" ","count": 0}),这会导致您的代码始终触发循环中的 "elif" 部分(函数 count_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