我创建了一个程序,把另外两个粘在一起: 多播接收器来自:
How do you UDP multicast in Python?
scapy数据包嗅探器:
https://thepacketgeek.com/scapy-sniffing-with-custom-actions-part-1/
我想知道为什么我的程序在包捕获方面不合适。当我捕获流量时,我使用等于1(秒)的超时。每隔3-5秒我就会看到捕获的数据包下降。我的源代码非常稳定(10.568Mbit/s)。我看到使用streamXpert程序时,比特率的值之间的差异大小不超过几十Kbits。
我想取得一致的,可靠的结果,但这样的下降
不可接受。总体效果良好。但我不知道是什么导致了这么大的落差。
下面是我的程序执行3次的结果,每个会话捕获10个1秒的样本,最后打印出来:
https://pastebin.com/7pb0R3gr
我试着分析100个样本,每次嗅探持续0.1秒,以便更好地了解可能导致这个问题的原因。我看到有时会发生一些非常奇怪的下降,可能会超过实际价值的一半。 结果如下: https://pastebin.com/7jk2VStL
import socket
import struct
from collections import Counter
from scapy.all import sniff
MCAST_GRP = '239.0.1.104'
MCAST_PORT = 12345
IS_ALL_GROUPS = True
packet_counts = Counter()
capturedPacketsSize = 0
bitrateList = []
## Defining custom function that sums sizes of captured packets
def custom_action(packet):
global capturedPacketsSize
capturedPacketsSize += len(packet)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if IS_ALL_GROUPS:
# on this port, receives ALL multicast groups
sock.bind(('', MCAST_PORT))
else:
# on this port, listen ONLY to MCAST_GRP
sock.bind((MCAST_GRP, MCAST_PORT))
#Creating socket that gets UDP multicast packets
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
print("_____.:| Starting analyse of bitrate! |:._____")
for x in range(10):
pkt = sniff(iface="eno4", filter="ip host 239.0.1.104", prn=custom_action, timeout=0.1)
MCbitrate = round((capturedPacketsSize*8)/(1024*1024),3)
bitrateList.append(MCbitrate)
capturedPacketsSize = 0
for x in range(10):
print("{0}\n".format(bitrateList[x]))
目前没有回答
相关问题 更多 >
编程相关推荐