使用迭代 IP 和端口号运行 Nmap 的 Bash while 循环脚本

问题描述

总结:我正在尝试创建一个 Bash 脚本,该脚本选择一个 IP 地址及其关联的开放端口,然后通过 Nmap 运行每个 IP 并显示/存储结果。

ports 文件(portsList)的格式:

192.168.1.1   53   udp
192.168.1.1   80   tcp
192.168.1.1   1900 tcp
192.168.1.110 135  tcp
192.168.1.115 1080 tcp

IP文件的格式(ipList):

192.168.1.1
192.168.1.110
192.168.1.115

我的 Bash 脚本:

#!/bin/bash
portsvar="$(cat formattedPorts)"
hostvar="$(cat oneHost)"

while read -r line;
do
echo "$line" > oneHost
grep -wf oneHost portsList | awk '{print $2}' | tr '\n' ',' > formattedPorts
nmap -n -sV -p"$portsvar" "$hostvar" >> scanResults
cat scanResults
done < ipList

我花了几个小时,尝试了这段代码的多种变体,并试图在网上找到解决方案。但无济于事。此脚本最多可以扫描并输出一个选定的 IP 和端口。

其他考虑因素是;如果端口是 UDP,则在端口选项上附加“U:”。另外,如果有一种方法可以显示 Nmap 扫描的输出,同时将其重定向到“>>”到文件中。

Bash 是我最熟悉的,但我愿意用不同的语言学习解决方案。

编辑 我通过替换尝试了以下 jhnc 的解决方案:

echo "$line" > oneHost
grep -wf oneHost portsList | awk '{print $2}' | tr '\n' ',' > formattedPorts
nmap -n -sV -p"$portsvar" "$hostvar" >> scanResults
cat scanResults

在下面的评论中使用 jhnc 的代码。结果输出是:

nmap -n -sV -p T:135 192.168.1.110
nmap -n -sV -p T:5985 192.168.1.112
nmap -n -sV -p T:54112,T:60000,T:8009,T:8888 192.168.1.131
nmap -n -sV -p T:5040 192.168.1.132
nmap -n -sV -p T:1041,T:1900,T:20005,T:33344,T:49152,T:49153,T:80 192.168.1.1

这个输出被回显到终端上 5 次。从这里我会尝试找到一个解决方案,让这组IP的输入运行一次。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)