这是一个命令行实用程序和库,旨在测试网络上的多播流量并对网络和设备进行压力测试。
该实用程序能够完全破坏未可靠配置的 L2 环境,因此请务必小心。
mcast 是一个命令行实用程序,能够发送和接收多播或通用 UDP 流量。它还允许模拟 IGMP 加入、离开和查询。
注意:目前在 Mac OSX 10.13.3 上使用 Go 版本 1.10 进行开发和测试。该程序应该可以在任何 Posix / Unix 上运行,但目前不能完全在 Windows 上运行。某些功能可能需要超级用户权限。
该存储库是 GPLv3 下的许可证。有关详细信息,请参阅 LICENSE.md。
版权所有 (C) 2018 威尔·史密斯
该程序是自由软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证(许可证的第 3 版)或(由您选择)任何更高版本的条款重新分发和/或修改它。
分发此程序的目的是希望它有用,但不提供任何保证;甚至没有适销性或特定用途适用性的默示保证。有关更多详细信息,请参阅 GNU 通用公共许可证。
您应该随该程序一起收到 GNU 通用公共许可证的副本。如果没有,请参阅 http://www.gnu.org/licenses/。
你必须已经安装了 go。如果您不知道,或者不确定,请访问 https://golang.org/doc/install。您还必须运行受支持且经过测试的操作系统和 Go 版本。
安装程序
go install github.com/individuwill/mcast
或者从 v0.1 版本下载预构建的二进制文件
在一台计算机上运行接收器
mcast receive
在另一台计算机上运行发送器
mcast send
主机之间必须启用组播路由
mcast 由子命令驱动。您可以像这样调用 mcast:
mcast subcommand [-options...]
子命令列表是:
每个子命令都有一组选项来控制其行为。许多命令共享相似的选项,并且在这种情况下选项语法是相同的。下面是每个子命令及其相关选项的详细说明。
显示应用程序的帮助和使用消息
mcast help [command]
可以通过指定您想要帮助的命令来显示特定子命令的帮助。
将向指定的 IP 地址发送 UDP 流量。将以指定的时间间隔连续循环发送,直到程序终止或发送的消息达到最大数量。
mcast send [-options...]
选项有:
如果启用该选项,将侦听指定 IP 地址上的 UDP 流量,并打印出收到的 UDP 消息的文本内容。
mcast receive [-options...]
选项有:
尚未实施
尚未实施
尚未实施
目前存储库中存在一些基本的代码测试,但需要更广泛的覆盖范围。
您可以使用以下命令之一手动执行测试:
go test ./..
go test github.com/individuwill/mcast
go test github.com/individuwill/mcast/multicast
存储库的根目录中有一个 Jenkins 文件,用于自动运行测试、针对 3 个操作系统进行交叉编译以及创建 zip 工件。存储库中有一个 git-hook 运行此提交,它将将该提交标记为通过或失败。
计划是在3个操作系统上测试代码,并测试jenkins集群中发送和接收组播的交互。
还有一个计划,当对 master 进行新的标记提交并通过测试时,自动创建带有二进制文件的新版本。
目前仅执行代码测试。它们通过官方的 golang docker 容器在 Linux 环境中执行。二进制文件存储在 Jenkins 中,必须手动发布。
我编写这个程序是为了测试网络设计中的多播功能,因为我发现缺乏用于测试多播的现有工具。我需要一个小型便携式二进制文件,可以将其复制到任何主机以进行快速测试。这对于虚拟实验室环境特别有用。
我还需要测试并能够观察无线网络中的流量行为,以了解供应商配置选项,从而为无线环境提供最强大的多播配置。到目前为止,通过该程序的正确选项集,如果无线基础设施配置不正确或者供应商不提供配置或控制多播行为的能力,则单个主机可能会对整个无线网段造成 DoS。
我借此机会使用这个程序来了解有关多播的更多信息并在 Golang 中进行一些编码。
我在开发程序时使用 https://github.com/troglobit/mtools 套件进行程序的初始测试。该工具集也是 mcast 的灵感来源。我选择不扩展 mtools,因为我想要轻松的并发性、轻松的交叉编译和跨平台二进制文件。
以下是我使用或用于测试多播功能的其他一些工具