为什么python和wiresh捕获的数据包之间有很大的差异

2024-05-23 23:43:10 发布

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

基于来自的多播接收器: How do you UDP multicast in Python?

考虑到我想用VLC传输10,5mb的测试文件视频并分析它发送的数据包,我对它进行了调整。 以下是VLC的配置: https://imgur.com/lAJIbTx

问题是,我在wireshark 769捕获的数据包上看到python打印出他接收到的略高于600的数据包。可能的原因是什么?我相信我在python中计算包的方法可能是错误的。你有什么解决办法吗? 下面是python和wireshark的数据包:

https://imgur.com/n3NmKhg

import socket
import struct

MCAST_GRP = '239.200.200.1'
MCAST_PORT = 5252
IS_ALL_GROUPS = True

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))

mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
counter = 0
print("Entering while loop")
while True:
    datagram = sock.recv(1328)
    counter +=1
    print(counter)

我想通过知道多播拖缆发送的捕获数据包的数量并将这个数字除以观察时间来计算比特率。但问题是,我想确定python捕获的数据包的数量是否正确,但wireshark和python之间如此大的差异看起来是不正确的。你知道吗

有趣的是,如果我理解正确,即使769个数据包也不够。769*1328=1.021.232字节,约1MB,其中视频为10.5MB。我想得对吗?你知道吗


Tags: https视频portcountersocketall数据包sock