gpt4 book ai didi

sockets - 仅在混杂模式下接收的 UDP 数据包

转载 作者:行者123 更新时间:2023-12-03 12:03:48 27 4
gpt4 key购买 nike

我在一台 VM Ubuntu 16.04 机器上的 100 个多播组上生成 UDP 数据包,并在另一台 VM Ubuntu 16.04 机器上订阅这些组。两者都在由 Hyper-V 管理器运行的 HP 服务器上。问题是我的应用程序只收到 100 个组中的 2 个。但是,当 Wireshark 捕获时,应用程序开始接收所有消息。

我发现了其他几个类似的问题,例如 this one ,它解释了因为 Wireshark 以混杂模式运行,它允许所有数据包通过(通过什么?),这解释了为什么我的应用程序也开始“看到”它们。因此,将以太网接口(interface)配置更改为混杂模式允许应用程序在不运行 Wireshark 的情况下接收所有消息。

但是其他没有正常接收的数据包有什么问题呢?我试图交叉验证“好”和“坏”消息的十六进制转储,它们似乎没有什么不同。 IP 和 UDP 级别的校验和是正确的。还有什么问题?

  • 组播 ip 范围 239.1.4.1-100
  • 目的端口 50003
  • 源端口范围 ~33000 - 60900
  • 防火墙被禁用

  • 编辑:

    看起来当应用程序仅订阅 8 个多播组时,它工作正常,但是,如果订阅超过 8 个,它只接收 2 个(如果它们以 .7 或 .8 结尾)或不接收,如上所述。所以,我会假设数据包是正确的。问题可能出在网络设置中吗?或者应用程序本身 - 需要在我没有编写的脚本中找到错误。

    EDIT2:

    我在另一台机器上安装了 ISO 镜像(虚拟机而不是 HP Windows Server),它可以正常工作。因此,我假设我的应用程序运行良好,并且所有 ubuntu 操作系统配置都是正确的。现在我把所有的责任都归咎于虚拟管理器/设置。有任何想法吗?

    最佳答案

    听起来好像您没有将它们告诉内核。

    http://tldp.org/HOWTO/Multicast-HOWTO-6.html

    您必须使用 setsockoptIP_ADD_MEMBERSHIP .并确保为您的本地接口(interface)使用正确的值。

    关于sockets - 仅在混杂模式下接收的 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639553/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com