python - wireshark 看到但应用程序看不到来自 tcp 重放的组播

标签 python udp multicast

我有一个正在使用 tcpreplay 播放的多播数据包捕获:

sysctl net.ipv4.conf.all.rp_filter=0
sysctl net.ipv4.conf.eth0.rp_filter=0
tcpreplay -i eth0 --loop=100 new.pcap

我用 wireshark 观察 eth0 上的流量,我可以看到我感兴趣的数据包(比如 224.0.23.60:4937)。

但是下面的 python 应用程序找不到数据包:

import socket
import struct

MCAST_GRP = '224.0.23.60'
MCAST_PORT = 4937

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((MCAST_GRP, MCAST_PORT))  # use MCAST_GRP instead of '' to listen only
                         # to MCAST_GRP, not all groups on MCAST_PORT
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
   print '#'
   print sock.recv(64)

netstat -g 给出以下输出:

lo              1      all-systems.mcast.net
eth0            1      224.0.23.60

我是不是漏掉了什么?

[编辑] 我应该准确地说,我的数据包捕获中的 ip src 不在同一个网络子域中(ip src:192.168.1.10),而我的 ip 类似于 146.186.197.164。

最佳答案

仔细阅读文档(http://tcpreplay.synfin.net/wiki/FAQ)后,似乎 tcpreplay 在 TCP/IP 堆栈和以太网设备驱动程序之间发送数据包,因此主机系统的 TCP/IP 堆栈永远看不到数据包。

我最终使用了一个 debian 操作系统,虚拟盒子配置了仅主机适配器,并在该机器上使用了 tcpreplay。

关于python - wireshark 看到但应用程序看不到来自 tcp 重放的组播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47415796/

相关文章:

python - 如何向具有颜色分配的散点图添加图例

python - Pandas:以一列的子字符串搜索和另一列的逆搜索为条件创建一个新列

java - 如何在 Android 上使用 UDP 数据报在两个进程和两个主机之间进行通信

python - 如何使用 python 在 selenium 中处理 javascript 警报

python - 使用 Python 插入多个 MySQL 记录。错误 : "Python ' tuple' cannot be converted to a MySQL type"

c - 在 C 程序中查找 UDP 数据有效负载中的八位字节

networking - 丢失 UDP 数据包的可能性有多大?

network-programming - 我们可以在 2 对特定的 IP 和端口之间同时有两个 udp 流吗?

.net - 使用 MSMQ 的多播时如何检测不可恢复的数据丢失?

c - 如何检查客户端是否加入了多播组?