nmap脚本循环源端口

时间:2014-09-12 15:34:13

标签: networking scripting nmap

我尝试通过旋转源端口并按照以下目标指向一个目标端口来扫描网络:

for source_port in `seq $start $end`
do
    nmap -sS -p $dest_port --source-port $source_port -P0 $dest_ip
done

问题是我每次都要启动一个nmap进程

nmap似乎设计为在命令行轻松旋转目标端口,但对于源端口,即使使用nmap脚本也找不到指定范围的方法(不知道如何访问源端口变量)脚本)

有人有想法吗?

由于

1 个答案:

答案 0 :(得分:1)

对于此任务,您可能希望使用像scapyPacketFu这样的数据包制作框架,因为这些可以让您准确指定要发送的数据包类型,而无需新进程每次都推出。

您还可以使用Npinghping3nemesis等数据包制作工具,但这些工具还需要为每个探针启动一个新流程(据我所知) )。

您可以在Nmap脚本中执行类似操作,方法是使用socket:bind为每个connect选择一个源端口,但是您必须进行大量调整才能到达完整Nmap端口扫描的性能。首先,您必须parallelize it一次发送多个数据包,但随后可能会使目标或网络超载并遇到拥塞问题。尽管如此,使用少量(大约20个)工作线程可能值得一试,以加快速度。

要加快当前方法的速度,请使用-n跳过反向名称解析。您可以通过在后台启动某些nmap进程或使用GNU Parallel来并行化它。您可以尝试使用--max-retries减少重试次数,因为默认最大值为10,但此处的快速测试表明,使用-Pn和单个端口,Nmap只会尝试2次到达端口。如果你想变得非常花哨,可以使用--initial-rtt-timeout--max-rtt-timeout,因为Nmap在启动时是故意保守的,假设它会发送许多数据包并更好地了解网络状况。在没有主机发现的情况下扫描一个主机上的一个端口意味着它没有机会进行自我调整。如果针对目标运行ping -c 10,则可以使用其最后一行输出来设置这些值。例如,如果我看到:

$ ping -c 10 scanme.nmap.com
PING scanme.nmap.com (74.207.244.221) 56(84) bytes of data.
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=1 ttl=56 time=75.0 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=2 ttl=56 time=75.5 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=3 ttl=56 time=73.9 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=4 ttl=56 time=75.4 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=5 ttl=56 time=74.7 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=6 ttl=56 time=78.9 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=7 ttl=56 time=73.6 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=8 ttl=56 time=79.4 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=9 ttl=56 time=74.8 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=10 ttl=56 time=75.1 ms

--- scanme.nmap.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9012ms
rtt min/avg/max/mdev = 73.646/75.691/79.459/1.857 ms

然后我可以将--initial-rtt-timeout设置为avg + 4 * mdev = 83ms,以便在平均往返时间周围给自己留出4个标准偏差。 Nmap的默认值是等待1000毫秒(1秒),所以这是一个非常大的加速。将--max-rtt-timeout设置为初始值的10倍以防万一。