centos - para - nmap linux
¿Está abierto el escaneo de un rango/subred IP completo para el puerto 80? (2)
nmap -Pn -p80 --open 46.105.0.0/16
... obtendrá una lista de los hosts que responden en tcp/80
y la salida nmap
correspondiente;
-
-Pn
: omite la prueba de ping, ya que solo te importa un puerto abierto -
--open
: devuelve solo las direcciones IP para las que está abierto el puerto
Con un poco de awk
(y grep
, porque soy flojo y no tan bueno en awk
, ¿podría un maestro del awk
arreglar esto para mí?), Puedes obtener solo la lista de direcciones IP:
nmap -Pn -p80 --open 46.105.0.0/16 | grep 46.105 | awk ''{print $5}NF == 6{print $6}''
nmap
también tiene opciones para dar salida a archivos en formatos específicos, o puede simplemente >
a un archivo:
nmap -Pn -p80 --open 46.105.0.0/16 | grep 46.105 | awk ''{print $5}NF == 6{print $6}'' > output.txt
Necesito una forma rápida y eficiente de escanear un rango de ip para el puerto 80 abierto.
Entonces, por ejemplo, si quería escanear el rango de OVH IP "46.105.0.0/16", necesito escanear cada ip en ese rango y generar una lista de cada ip con el puerto 80 abierto.
46.105.0.51
46.105.0.72
46.105.0.91
46.105.0.7
46.105.0.15
Necesito escanear varias subredes y necesito que salga a un archivo.
Editar: también estoy ejecutando CentOS en mi caja dedicada con un enlace ascendente de 1 Gbit.
Para cualquiera que lea esta publicación que no tenga acceso a nmap, esta es una forma rápida y rudimentaria de escanear el puerto 80 de la red. Lo único que necesita este script es ipcalc, que probablemente esté disponible.
#!/bin/bash
# easier to end the script if signal is caught
trap exit 1 2 3 4 5 6 7 8
# define a function that emulate netcat by opening a port to an ip via file descriptor
netcat() {
exec 20<>/dev/tcp/${1}/${2}
}
# using ipcalc, get the nwtork address and the broadcast address and make both $NETWORK and $BROADCAST available to the script
export $(ipcalc -b -n $1)
# Convert the NETWORK and BROADCAST from dotted notation to hex
printf -v startHexIP "%0.2x%0.2x%0.2x%0.2x" $(tr ''/.'' '' '' <<< $NETWORK)
printf -v endHexIP "%0.2x%0.2x%0.2x%0.2x" $(tr ''/.'' '' '' <<< $BROADCAST)
# computations are done in decimal so we need decimal representation of the BROADCAST address to control the list of IP addresses
printf -v endDecIP "%d" 0x${endHexIP}
# legitimate IP addresses start from NETWORK ADDRESS + 1 and end at BROADCAST ADDRESS - 1
for((i=$(( 0x$startHexIP + 1 )); i<$endDecIP; i++)); do
# $i is in decimal. we need to convert to hex
printf -v hexI "%8.8x" $i
# convert hex to dotted notation.
printf -v ip "%d.%d.%d.%d" 0x${hexI:0:2} 0x${hexI:2:2} 0x${hexI:4:2} 0x${hexI:6:2}
if (netcat $ip 80 > /dev/null 2>&1); then
echo $ip
fi
done
El script se puede ejecutar pasando solo un argumento, <network>/<prefix>
.
Ejemplo.
./script 192.168.1.5/23