从脚本中并行生成数千个子网的最佳方法是什么?

时间:2014-07-28 05:48:37

标签: bash parallel-processing nmap

要在A类网络的一部分中清点端口,我使用nmap将其扫描为几千个C类网络。我使用parallel来同时运行32个子网扫描作业。

脚本的最小化版本:

  

cat $ subnets |读取子网

     
    

DO

         

echo nmap -Pn -p" $ tcpport" " $子网" >> /tmp/nmap_parallel.list

         

完成

  
     

parallel -j32< /tmp/nmap_parallel.list

     

等待

     

回显子网扫描端口$ tcpport完成。

这种方法的问题是脚本并行停止。

有没有更好的方法从脚本中使用parallel?

2 个答案:

答案 0 :(得分:1)

Nmap具有内置并行性,应该能够在单个命令中处理扫描A类网络。事实上,由于Nmap的网络状态监控和反馈机制,通常最好一次只运行一个Nmap实例。 Nmap的瓶颈不是处理器,因此使用parallel运行多个实例无济于事。相反,Nmap将立即发送许多探测并等待响应。随着新响应的出现,可以发送新的探测器。如果Nmap获得每个探测的响应,它会增加它发送的未完成探测(并行性)的数量。当它检测到丢包时,它会减少这个数字(以及其他一些与时序相关的变量)。

这种自适应时序行为在official Nmap Network Scanning book中详细讨论,并基于TCP中使用的公共算法。

您可以通过调整一些timing options并消除与您无关的扫描阶段来加快扫描速度。在简单的一端,您可以尝试-T4一次增加几个与时序相关的设置,而不会超出高速链接的能力。您还可以尝试添加-n以跳过反向DNS名称查找阶段,因为您可能对这些结果不感兴趣。

您已使用-Pn标志跳过主机发现阶段;如果你只是扫描一个端口,这可能是一个好主意,但它也可能导致混乱的输出和较慢的扫描时间,因为Nmap必须假设每个主机都启动并进行真正的端口扫描。还记得自适应计时算法吗?它们在执行主机发现时的行为略有不同,这可能会导致更快的扫描时间。如果你不喜欢default host discovery probes,你可以自己调整它们。如果我正在扫描端口22,我可以将其用作具有-PS22的主机发现探测器,这意味着我的输出将仅显示具有该端口打开或关闭的主机(不是防火墙而不是防火墙)。如果您坚持-Pn,您可能还应该使用--open选项仅显示所选端口打开的主机,否则您将有一个批次输出

答案 1 :(得分:0)

无法将命令发送到后台&为了同时处理其他人?像下面的东西;

#!/bin/bash
ports="20 21 22 25 80 443"
for p in $ports
do
nmap -Pn -p$p 10.0.1.0/24 &
done