Este es un error en Nmap. ¡Gracias por descubrirlo! Respuesta corta: hubo un error en la forma en que contamos cuántas direcciones ya se escanearon, que acabo de corregir en r36341.
Respuesta más larga: Nmap ejecuta exploraciones en varias fases. Los más importantes para este error son el descubrimiento del host (escaneo de ping) y el escaneo de puertos. Nmap realiza un bucle sobre todas las direcciones posibles, realiza el descubrimiento del host en grandes porciones cuando es necesario y captura un número de hosts "up" para realizar el escaneo de puertos en un grupo. Se detiene en un bucle sobre las direcciones cuando tiene suficientes destinos para un grupo de hosts o cuando se agotan las direcciones. Para -iR
, las direcciones nunca se agotan, por lo tanto, verificamos si o.numhosts_scanned
es menor que o.max_ips_to_scan
. Eso funcionaría, excepto que no consideramos un host "activo" "escaneado" hasta después de la fase de escaneo del puerto. Así que existe la posibilidad de verificar direcciones adicionales. Durante una exploración larga, la mayoría de estos se cuentan de todos modos porque aumentan o.numhosts_scanned
después de la fase de exploración del puerto y antes de la fase de descubrimiento del host para el próximo grupo, pero el último grupo de host tendrá algo de transferencia. Resolví esto agregando una verificación de bucle adicional para asegurar que los hosts "up" se agregaran a o.numhosts_scanned
antes de comparar con o.max_ips_to_scan
durante la fase de descubrimiento.
Ejemplo de salida de depuración de nmap -iR 2 -p80 -d -n
:
Initiating Ping Scan at 15:14
Scanning 2 hosts [2 ports/host]
Completed Ping Scan at 15:14, 1.48s elapsed (2 total hosts)
Overall sending rates: 4.06 packets / s.
Esto muestra que hicimos ping correctamente en 2 direcciones.
Nmap scan report for 20.240.133.236 [host down, received no-response]
Uno de ellos estaba caído, por lo que el informe se imprime de inmediato. Uno de ellos debe haber estado arriba porque solo recibimos uno de esos informes.
Initiating Ping Scan at 15:14
Scanning 54.28.85.198 [2 ports]
Completed Ping Scan at 15:14, 1.48s elapsed (1 total hosts)
Overall sending rates: 2.71 packets / s.
¡Vaya! El objetivo "ascendente" no se contabilizó para la cantidad de hosts escaneados, por lo que el escaneo de ping cree que necesita escanear uno más para que se haga.
Nmap scan report for 54.28.85.198 [host down, received no-response]
Ese estaba abajo. Así que 2 abajo hosts y uno arriba.
Initiating Connect Scan at 15:14
Scanning 187.142.197.40 [1 port]
Completed Connect Scan at 15:14, 0.06s elapsed (1 total ports)
Overall sending rates: 17.06 packets / s.
Nmap scan report for 187.142.197.40
Host is up, received conn-refused (0.059s latency).
Scanned at 2016-09-29 15:14:26 UTC for 3s
PORT STATE SERVICE REASON
80/tcp closed http conn-refused
Final times for host: srtt: 59196 rttvar: 33779 to: 194312
Y aquí está el tercero: el puerto 80 se cerró.
Read from /usr/bin/../share/nmap: nmap-payloads nmap-services.
Nmap done: 3 IP addresses (1 host up) scanned in 3.06 seconds
Y aquí está la salida que muestra que se escanearon 3 direcciones IP, a pesar de que solo solicité 2.