Linux中存在一个特殊的设备文件/dev/tcp/<HOSTNAME>/<PORT>,该文件可以直接和目标建立TCP通信,利用这一特性可以进行端口检测。
zzh@ZZHPC:/dev$ lh | grep tcp zzh@ZZHPC:/dev$ echo > /dev/tcp/192.168.1.16/21 zzh@ZZHPC:/dev$ echo > /dev/tcp/192.168.1.16/22 bash: connect: Connection refused bash: /dev/tcp/192.168.1.16/22: Connection refused zzh@ZZHPC:/dev$ lh /dev/tcp/192.168.1.16/22 ls: cannot access '/dev/tcp/192.168.1.16/22': No such file or directory zzh@ZZHPC:/dev$ lh /dev/tcp/192.168.1.16/21 ls: cannot access '/dev/tcp/192.168.1.16/21': No such file or directory
没有输出表示端口是通的,有输出端口不通。
portscan.txt
172.17.0.1 21,22,8080 192.168.1.16 21,22,80
portscan.sh:
if [[ -n "$1" ]] && [[ -f "$1" ]]; then while read -r line; do # -r do not allow backslashes to escape any characters machine=$(echo "$line" | cut -d' ' -f1) || exit 100 ports=$(echo "$line" | cut -d' ' -f2) || exit 101 OLD_IFS=$IFS IFS="," for port in $ports; do if (echo > /dev/tcp/"$machine"/"$port") > /dev/null 2>&1; then echo "OK: $machine -> $port" else echo "ERROR: $machine -> $port" fi done IFS=$OLD_IFS done < "$1" else echo "ERROR: Invalid or missing data file!" exit 103 fi
zzh@ZZHPC:~/aaa$ ./portscan.sh portscan.csv OK: 172.17.0.1 -> 21 ERROR: 172.17.0.1 -> 22 ERROR: 172.17.0.1 -> 8080 OK: 192.168.1.16 -> 21 ERROR: 192.168.1.16 -> 22 ERROR: 192.168.1.16 -> 80 zzh@ZZHPC:~/aaa$ ./portscan.sh portscan.csv | sort -k1 ERROR: 172.17.0.1 -> 22 ERROR: 172.17.0.1 -> 8080 ERROR: 192.168.1.16 -> 22 ERROR: 192.168.1.16 -> 80 OK: 172.17.0.1 -> 21 OK: 192.168.1.16 -> 21
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律