【问题标题】:Multicast from tcp replay seen by wireshark but not by application来自 tcp 重播的组播被wireshark看到但不是被应用程序看到
【发布时间】:2017-11-21 14:41:01
【问题描述】:

我正在使用 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。

【问题讨论】:

  • tcpreplay?我以为多播只是 UDP?
  • 显然 tcpreplay 能够播放 udp 数据包,因为我可以在 wireshark 中看到 udp 多播数据包。
  • 你的应用什么也不发送Check this
  • @dsgdfg 我的应用只是在监听,流量是由 tcpreplay 和数据包捕获 (pcap) 生成的。

标签: python udp multicast


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多