要在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?
答案 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