从wireshark看到的tcp重播多播,但不是应用程序

时间:2017-11-21 14:41:01

标签: 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 app无法找到数据包:

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。

1 个答案:

答案 0 :(得分:0)

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

我最终使用debian Os,虚拟盒配置了仅主机适配器,并在该机器中使用tcpreplay。