Joh*_*ing 13 linux shell-script multicast tcpdump
我想编写一个 linux shell 脚本来捕获特定的多播流量。具体来说,我想创建一个 pcap 文件,其中包含一个特定多播组/端口的所有流量。
这是我用来查看流量的命令行:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Run Code Online (Sandbox Code Playgroud)
只要我已经建立了对该组的多播订阅,这就可以正常工作。例如,如果我在另一个控制台中运行它:
mdump 233.54.12.234 22001 10.13.252.51
Run Code Online (Sandbox Code Playgroud)
tcpdump会看到数据包。如果mdump没有运行,tcpdump则什么也看不到。
在开始捕获之前,是否有标准的 linux-y 方法来建立这些多播连接?我可以mdump用来建立这些连接,但这似乎很浪费,因为mdump将处理组上的所有数据,但我只是打算将其丢弃。
请注意,由于我的特定环境,我不鼓励将界面置于混杂模式。事实上,它可能被禁止。
Bri*_*ard 10
TL;DR - 选择一个:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
socat STDIO UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 > /dev/null
起初我打算说“只需使用ip maddress add并完成它”。问题ip maddress仅影响链路层多播地址,而不是协议多播地址 ( man 8 ip-maddress)。
话虽如此,使用autojoin带有地址动词的标志可以很好地解决问题。
不过,这引发了一些后续问题。我假设因为您将运行tcpdump或tshark您拥有 root 权限。 如果你没有22001 是一个高编号的端口,其他实用程序socat也可以完成任务。
不要相信我的话。为了测试这一点,我们可以使用socat或ncat(通常通过nmap/打包nmap-ncat)生成多播 UDP 数据包。
在某些数量的主机上运行的一个下面的两个组合:
选项1:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
Run Code Online (Sandbox Code Playgroud)
选项 2:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &
Run Code Online (Sandbox Code Playgroud)
第一个选项需要 root,或者至少需要功能 CAP_NET_ADMIN。第二个选项不需要 root,但也希望在前台运行,因此可能不太利于脚本编写(尽管跟踪子进程 ID 并使用trapBASH 中的a 对其进行清理可能正是您正在寻找的。
一旦完成(但在我们疯狂测试我们的tcpdump/tshark命令之前)确保内核识别已加入正确 IGMP 组的接口。如果你感觉超级看上你可以去坚果解析六角出来的/proc/net/igmp,但我建议只是运行netstat -gn。
一旦您确认您看到订阅了正确组的接口,就会启动您的 tcpdump 命令:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Run Code Online (Sandbox Code Playgroud)
另外,如果你不想完全走的tcpdump的路线(或偶然发现了这个答案,只是好奇,想看看多播在行动),你可以使用socat上面命令加入和呼应内容,STDOUT通过更换/dev/null具有STDOUT:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
Run Code Online (Sandbox Code Playgroud)
然后,从另一台机器使用以下两个选项之一发送一些简单的测试数据:
选项1:
socat STDIO UDP-DATAGRAM:233.54.12.234:22001
Run Code Online (Sandbox Code Playgroud)
选项 2:
ncat -u 233.54.12.234 22001
Run Code Online (Sandbox Code Playgroud)
当您运行其中任何一个命令时,它将以交互方式等待输入。只需输入一些内容,按回车键发送,然后CTRL+D当您完成发送EOF消息时。
在这一点上,您应该已经看到了一个端到端的测试,并使用一些命令构建了世界上最糟糕、最不安全的聊天系统。
注意如果您想使用ip addr add ...(选项 1)离开加入的多播组,您可以执行以下操作:
sudo ip addr del 233.54.12.234/32 dev eth1 autojoin
Run Code Online (Sandbox Code Playgroud)