我可以用 PHP 脚本发送 IGMP 数据包吗?IGMP 甚至在传输层上吗?
我正在查看一些发往 224.0.0.251 的 JOIN 数据包。
我注意到 IP 标头没有分配端口,但确实指定了 MAC 地址,这让我相信 IGMP 不在传输层上,而是在网络层上。(希望我说的没错)
有人可以为我澄清一下吗?我只是想发送一个 JOIN 数据包。
我正在阅读 rfc3376 试图找到答案,但它只是展示了如何构建一个。在尝试这样做时,我只收到一个格式错误的数据包。
传统上,您将使用 socket 选项IP_ADD_MEMBERSHIP
(和相应的IP_DROP_MEMBERSHIP
)来加入多播组。这将触发操作系统生成 IGMP 加入数据包。
这些选项使用IPPROTO_IP
“级别”设置为setsockopt()
根据bugs.php.net 站点上的这个问题,这些选项默认情况下不可用。但是,该页面上列出了一个补丁,应该将它们添加到您的 php 安装中。
可能不是用现有的 PHP 手段。现有的扩展允许您访问 TCP/UDP 层,但不能访问下面。您可能可以使用一些命令行工具,例如来自Nemesis 项目的 nemesis-igmp来执行此操作。