问题标签 [igmp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
31523 浏览

networking - Linux 和 IGMPv3 上的多播加入

我们遇到了一个棘手的问题。我们正在编写一个接收多播 UDP 流量的 C++ 程序。我们正在将我们的应用程序移至不同的网络环境,我们的运营团队已要求我们支持来自我们的应用程序的 IGMPv3 成员资格公告。初步调查表明 Linux 2.6 内核确实支持 IGMPv3。因此,我很困惑,当我们运行 tcpdump 时,我们会看到以下输出跟踪:

我的理解是,可以通过在文件 /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version 中指定一个非零值来强制内核使用较低版本的 IGMP;但是,我已经确认该文件具有零值配置。

我们的应用程序使用以下代码加入多播组:

我们需要在源程序中包含一些额外的东西来强制 IGMPv3 吗?

0 投票
2 回答
885 浏览

php - 使用 PHP 发送 IGMP

我可以用 PHP 脚本发送 IGMP 数据包吗?IGMP 甚至在传输层上吗?

我正在查看一些发往 224.0.0.251 的 JOIN 数据包。

我注意到 IP 标头没有分配端口,但确实指定了 MAC 地址,这让我相信 IGMP 不在传输层上,而是在网络层上。(希望我说的没错)

有人可以为我澄清一下吗?我只是想发送一个 JOIN 数据包。

我正在阅读 rfc3376 试图找到答案,但它只是展示了如何构建一个。在尝试这样做时,我只收到一个格式错误的数据包。

0 投票
4 回答
3065 浏览

c - IGMPv2 数据包的路由器警报选项

我正在尝试伪造一个 IGMPv2 Membership Request 数据包并将其发送到 RAW 套接字上。

RFC 3376 规定:

IGMP 消息封装在 IPv4 数据报中,IP 协议号为 2。本文档中描述的每个 IGMP 消息都以 1 的 IP 生存时间发送,IP 网络控制优先级(例如,服务类型 0xc0),并在其 IP 标头中携带 IP 路由器警报选项 [RFC-2113]

所以必须设置 IP_ROUTER_ALERT 标志。

我试图伪造数据包的严格必要条件(例如,只有 IGMP 标头和有效负载),所以我使用 setsockopt 来编辑 IP 选项。

一些有用的变量:

以下是我打开 RAW 套接字的方法:

然后我设置 TTL 和 Router Alert 选项:

IP_ROUTER_ALERT的setsockopt返回0。伪造数据包后,我用sendto这样发送:

数据包已发送,但缺少 IP_ROUTER_ALERT 选项(使用 wireshark 检查)。难道我做错了什么?还有其他方法可以设置 IP_ROUTER_ALERT 选项吗?

提前致谢。

0 投票
3 回答
11953 浏览

python - 如何在 Python 中发送具有给定十六进制有效负载的 IP 数据包?

我已经嗅探了一个 IGMP 数据包,现在我想在 python 的帮助下发送它。有什么方法可以发送数据包

没有像 impacket 这样的数据包生成器?

UPD 好的,我尝试使用原始套接字,如下所示:

一切都很好,除了一件小事......如果我嗅探那个数据包,它看起来像这样:

如您所见,由于某种原因,python 忽略了我的标头并创建了自己的标头。我该如何解决?

0 投票
1 回答
2276 浏览

c - 使用 IP_ADD_SOURCE_MEMBERSHIP 无法为 RAW 套接字添加超过 10 个源地址

你好,

我使用设置套接字选项 IP_ADD_SOURCE_MEMBERSHIP 添加超过 10 个源地址。但是在 10 个源地址之后,我无法进一步添加。谁能告诉我如何为每个套接字添加 10 个以上的地址。我的代码如下,

袜子=套接字(AF_INET,SOCK_RAW,IPPROTO_UDP);

/* 下面的代码重复了 10 次以上 */

添加 10 个源地址后出现无法设置 IP_ADD_SOURCE_MEMBERSHIP! 的错误。

提前致谢

德比约蒂

0 投票
1 回答
19748 浏览

c - 套接字错误:90:消息太长

在 IGMP 套接字调用的以下场景中出现错误;

sendto 调用失败,提示消息太长。我使用 8192 作为缓冲区大小。所以我尝试使用以下调用来修复此错误;

setsockopt() 调用成功,但 sendto() 出现相同错误;

所以我用getsockopt()调用检查了SO_SNDBUF的大小,它显示1字节?!

我在做什么错。

Linux 内核是否需要重新编译以获得 IGMP 支持?或者我错过了什么?

0 投票
2 回答
3965 浏览

c# - 如何在 C# (IGMPv3) 中加入源特定的多播组

我们有一个 C# 应用程序,它可以加入并接收来自多播组的数据。这很好用。我们现在希望支持 IGMPv3 并能够在加入多播组时指定源的 IP。从 MSDN 文档中,我看不到如何执行此操作。我发现以下链接似乎可以回答我的问题。

http://social.msdn.microsoft.com/Forums/en/netfxnetcom/thread/e8063f6d-22f5-445e-a00c-bf46b46c1561

这是我如何实现的:

但是当调用 SetSocketOption() 并出现此错误时,我得到一个 SocketException The requested address is not valid in its context:。

有人可以指出我在这里做错了什么吗?谢谢!

0 投票
2 回答
979 浏览

c# - 如何在 C# 中使用 MLDv2(IPv6 多播)


在 IPv4 中,[IGMP 版本 3 增加了对“源过滤”的支持,即系统能够报告对接收数据包的兴趣*仅*来自特定源地址。][1]

我在 C# 应用程序中使用 IGMPv3 来支持这种行为。这是我的做法。

我现在正在我的应用程序中添加对 IPv6 的支持,我需要获得与 IPv4 相同的行为。根据我的阅读,IPv6 中 IGMPv3 的等效协议是MLDv2。有人知道如何在 C# 中使用 Socket 实现这一点吗?

谢谢!

0 投票
1 回答
17341 浏览

windows-7 - 在 Windows 7 上设置 IGMP 版本

我有一个写在“外面”的软件(例如没有可用的源代码),它允许我在多播模式下使用它。我正在尝试在由于技术原因只能使用 IGMP 版本 2 的网络上使用此软件。

我的操作系统是 Windows 7(64 位,但我怀疑这会有所不同)。到目前为止,我的搜索只为我提供了 Windows XP 和 Windows Server 解决方案,所有这些都涉及编辑注册表。除了通常的原因(又名“注册表偏执狂”),在这种情况下我会犹豫编辑注册表,因为这个特定的网络不是我将使用的唯一网络;在我尝试使用多播的所有其他网络中,我完全没有问题。

有没有一种直接的方法可以将此软件强制到 IGMP V2 上?

谢谢!

约翰·普莱斯

0 投票
1 回答
1238 浏览

c# - 窥探 IGMP 流量

我建立了一个库来做 IGMP 的东西。现在,愚蠢的是,我的图书馆还进行了存在监控以确保其他人仍然是该组的一部分。

IGMP 在较低级别做完全相同的事情。分开消息,轮询路由器它仍然是同一组的一部分,整个事情。我刚刚重复了所有相同的工作,它可能没有那么健壮。

如果我可以利用这些数据包,我可以让一切变得更清洁(而且我不会重新发明轮子)。

任何人都有这样做的经验吗?也许创建某种疯狂的套接字?我不想为此使用 libpcap。我认为语言并不重要,只要可以在 Windows/Linux 上使用 Sockets