我正在尝试创建一个简单的bash脚本,它可以使用nmap -p在多个-p和端口上运行“特定”端口扫描。我遇到的问题是,当它从port#文件中读取.txt后的IP时,文本文件在端口和IP之间有必要的空间,但是它会导致脚本失败。下面是我的代码。我试着把这变得简单,我唯一能想到的就是创建一个数组,但即便如此,我仍然认为nmap -p端口扫描的格式也会出现同样的问题。有什么建议吗?
for i in $(cat 'filepathway')
do
nmap -p $i
done
它执行如下: nmap -p 'port#‘
而不是这个: nmap -p 'port#‘'IP#’
.txt看起来如下(这些值是随机的)
23001 172.55.545.254
23002 172.55.545.254
..。
发布于 2022-01-04 13:14:25
for i in $(cat file); ...
不逐行读取文件,而是逐字读取文件。
您可以使用while read ...
:
while read port ip; do
nmap -p "$port" "$ip"
done < "file"
发布于 2022-01-04 13:37:37
您的问题是,循环从$(cat filepathway)
的拆分扩展中分别读取每个单词。这将是一个端口号、一个IP地址、另一个端口号等等。通常,您应该避免重复扩展命令替换,因为它的内存效率低下,容易出现您遇到的错误类型和其他错误,并且在命令的全部结果读入内存之前不允许循环开始执行。
如果不是端口号,您可以让nmap
使用-iL
读取IP地址列表:
nmap -iL addr.list
..。或者,如果你想要覆盖特定范围的端口,
nmap -p 23000-23100 -iL addr.list
现在,您可以做的是像这样使用xargs
:
xargs -L 1 nmap -p
这将读取每一行,并执行nmap -p给出的命令,后面跟着端口号和IP地址。
大多数常见的xargs实现将允许您使用带有数值选项-参数的-P选项运行许多并行调用(请参阅系统上的tho xargs手册)。
如果仍然希望使用循环,请确保从每一行(作为
已经由pLumo显示
)分别读取端口号和IP地址:
while read -r port ip; do
nmap -p "$port" "$ip"
done
https://unix.stackexchange.com/questions/685037
复制