在bash中侦听返回的UDP数据包

时间:2014-06-16 16:02:14

标签: bash sockets

我使用bash(4.0.33)网络支持进行学习,并尝试在bash中创建端口扫描程序。对于TCP,我用

打开了一个TCP / IP套接字

exec 3<>/dev/tcp/192.0.2.1/80

如果连接被拒绝或 connect 系统调用超时,则采取适当的措施。但是,使用UDP,我可以轻松地发送带有

的数据包

echo > /dev/udp/192.0.2.1/53

但如何从正确的套接字读取返回的数据包?我的意思是发送到192.0.2.1的UDP数据报具有来自临时端口范围的源端口,因此我不知道应该读取/dev/udp/192.0.2.1/目录中的哪个套接字。或者如果没有像 tcpdump

这样的外部工具,这是不是可行的

2 个答案:

答案 0 :(得分:5)

Bash的UDP支持不是很好,并且是在许多发行版(Debian / Ubuntu及其衍生产品)上编译出来的。推荐的工具是netcat:

nc -u 192.0.2.1 53

注意:使用coproc或命名管道从同一个netcat进程读取和写入。不要先发送数据包并尝试捕获回复netcat。

但是,Bash确实是错误的语言。考虑使用Python,它可以更好地处理UDP和二进制数据,只需要几行代码。

答案 1 :(得分:0)

“ bash绝对不是正确的选择”
“虽然Bash确实是错误的语言”
不知道为什么要断言(取决于disto)。这适用于pi-Z-W:

SELECT * FROM tablenamehere WHERE coduser = "5OEWP1BPSV";

然后另一个进程可以说每小时发送一次
echo“ !! T $(date +%H%M%S)”> /dev/udp/192.168.2.165/16523

我确实必须使用/etc/rc.local中的“ set H +”关闭历史记录扩展来处理意料之外的(对我来说)扩展!用引号引起来。