基于shell脚本实现UDP端口探测

举报
彭宁均 发表于 2019/03/20 15:54:10 2019/03/20
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。