基于shell脚本实现UDP端口探测
【摘要】 shell提供了一种建立TCP/UDP连接的方法:/dev/udp/host/port/dev/tcp/host/port所以,直接重定向当前shell的一个文件描述符到对应的ip/端口:exec 8<>/dev/udp/10.0.2.15/12345就相当于建立一个UDP socket。发送报文:echo "" >&8抓包结果:00:48:18.291124 IP 10.0.2.15.40...
shell提供了一种建立TCP/UDP连接的方法:
/dev/udp/host/port /dev/tcp/host/port
所以,直接重定向当前shell的一个文件描述符到对应的ip/端口:
exec 8<>/dev/udp/10.0.2.15/12345
就相当于建立一个UDP socket。
发送报文:
echo "" >&8
抓包结果:
00:48:18.291124 IP 10.0.2.15.40371 > 10.0.2.15.12345: UDP, length 1 00:48:18.291145 IP 10.0.2.15 > 10.0.2.15: ICMP 10.0.2.15 udp port 12345 unreachable, length 37
由于UDP的无连接性,命令返回的结果依然为成功。
从对应的文件描述符中读取状态:
root@debian2:~# cat <&8 cat: -: Connection refused
当然,直接往流中再次写入数据,也会得到同样的错误:
root@debian2:~# exec 8<>/dev/udp/10.0.2.15/12345 root@debian2:~# echo "" >&8 root@debian2:~# echo "" >&8 -bash: echo: write error: Connection refused
但是,注意,以上方法脚本化使用时,需要在连续发送两个报文的语句中加入sleep语句,否则,由于脚本执行太快,连接发送两个报文,port xxx unreachable 报文还未回来,依然会返回成功。
使用完毕之后,关闭对应的流:
exec 8>&-
参考:
bash shell 连接socket
Bash One-Liners Explained, Part III: All about redirections
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)