使用 netcat 扫描主机和端口

使用 netcat 扫描主机和端口

我必须使用 netcat 来扫描主机和端口。主机位于主机文件中,端口位于端口文件中。我必须逐行读取每个文件,并使用 netcat 查看端口是否已启用、已禁用或无效,最后将此信息发送到名为 scan_report.txt 的文件中


netcatfunction()
{

local portfile=$2
local hostfile=$4

paste $2 $4 | while IFS="$(printf '\t')" read -r f1 f2
do
        result1=$( nc -zvw1 $f2 $f1 | grep succeeded )
        $( $result1 > scan_report.txt)

done
}

netcatfunction $2 $4

答案1

#!/bin/bash

testNet(){
        nc -zw 1 $1 $2
        if [ "$?" -eq "0" ]; then
                echo "$1 was listening on $2"
                echo "$2 was open on $1" >> scan_report.txt
        else
                echo "$1 was not listening on $2"
        fi

}


for host in $(cat hostfile); do
        for port in $(cat portfile); do
                testNet $host $port &
        done
done
sleep 2
cp scan_report.txt sorter
cat sorter | sort > scan_report.txt
rm sorter

解释:

“提升”的大部分工作都在函数内部,因此它只能与 并行运行&。这将为测试中的每个主机和端口生成一个子进程,而不会让您等待命令中每一秒超时的总和nc。在nc命令执行期间,主脚本将继续执行。这不会对资源造成问题,因为由于超时,每个进程最多持续一秒钟。

至于发生了什么,首先它从主机文件中读取一个主机,然后从端口文件中读取每个端口。它将每个主机与每个端口组合起来,并将其传递给 testNet 函数,该函数执行命令nc并通过检查状态输出变量来确定连接是否成功$?,成功时返回“0”。其他任何结果都被解释为失败。>> 重定向器确保每个结果都附加到文件中,并且不会完全覆盖它。

最后,在脚本的末尾,将结果按字母顺序排序并发送回文件。

这假设主机是原始 IP 地址或 FQDN,而端口只是像“22”这样的数字。如果您想要测试某个范围内的每个端口而不必逐行列出它们,则可以用 替换,以for port in $(cat portsfile); do测试for((i=1;i!=20;i++)); do从 1 到 19 的每个端口(将 20 替换为所需的最大值,将 1 替换为所需的最小值)。

相关内容