ZhangZhihui's Blog  

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

 

posted on 2024-03-17 17:14  ZhangZhihuiAAA  阅读(198)  评论(0)    收藏  举报