Linux 学习笔记
1. 快速检测端口连通性
/dev/tcp/<Hostname>(静态IP地址)/<port>(端口号) 特殊的文件,允许通过该接口进行TCP网络通信
例 : 测试 192.168.1.1的22端口是否打开, /dev/tcp/192.168.1.1/22 没有输出结果代表端口是通的,如果有结果输出代表端口是不通的并未打开
利用Bash脚本,还可以同时批量检测多台服务器的多个端口。
首先创建一个CSV文件(portscan.csv),在文件中记录服务器的IP地址和端口号信息,一行一个,端口号和IP地址使用空格分隔,如果有多个端口使用逗号进行分割,接着创建一个简单的Bash脚本(scan.sh),该脚本会读取文件的每一行并截取其中的IP地址和端口号的信息,然后通过for循环调用/dev/tcp设备文件来测试目标的端口连通性,最后打印成功或失败信息。为脚本配置上可执行权限,然后运行,将CSV文件作为参数传递给脚本(./scan.sh protscan.csv),几乎一瞬间就完成了测试,输出结果有点乱,可以使用管道符配合sort命令来排序一下这样就可以很清楚的看到结果(./scan.sh portscan.csv | sort -k1),哪些端口是打开的,哪些端口是关闭的
if [ -n "$1" ] && [ -f "$1" ]; then
while read -r line' do
machine=$(echo "$line"| /bin/cut -d" " -f1)|| exit 100
ports=$(echo "$line"| /bin/cut -d" " -f2)|| exit 101
OLD_IFS=$OLD_IFS
IFS=","
for port in $ports; do
if (echo >/dev/tcp/"$machine"/"$port") >dev/null 2>&1; then
echo "OK: $machine -> $port"
else
echo "ERRORE: $machine -> $port"
fi
done
IFS=$OLD_IFS
done < "$1"
else
echo "ERROR: Invalid or missing data file!"
exit 103
fi