
Pido disculpas de antemano porque es una pregunta sencilla.
Entonces estoy intentando escanear una Clase C para identificar todos los servidores de correo por IP. La gran mayoría de las IP no son servidores de correo. Estoy intentando filtrar los que lo son.
Intenté lo siguiente pero no me devolvieron lo que quería.
nmap -p 25 192.168.15.1-254 | grep report && grep open
y
nmap -p 192.168.15.1-254 (grep report | grep open)
¿Existe alguna utilidad diferente que deba utilizar? ¿O es un problema con mi sintaxis?
Respuesta1
No lo tengo claro: ¿necesita cadenas que contengan solo informe o abierto? Si es así, utilice:
grep
:
nmap | grep -E "report|open"
sed
:
nmap | sed '/report\|open/!d'
si informar y abrir juntos
grep
:
nmap | grep report | grep open
sed
:
nmap | sed '/report.*open\|open.*report/!d'
Respuesta2
En lugar de realizar un posprocesamiento con grep, intente pasar la --open
opción a Nmap. Esto ocultará todos los puertos cerrados o filtrados. También puede utilizar las opciones -oG
o -oA
para generar resultados "grepables". Aquí hay un ejemplo que hace lo que creo que estás buscando:
nmap -p 25 --open -oA smtp-servers-%y%m%d 192.168.15.0/24
Los resultados estarían en smtp-servers-20120607.nmap
, smtp-servers-20120607.gnmap
y smtp-servers-20120607.xml
. Puede obtener direcciones IP para servidores SMTP abiertos de esta manera:
awk '/\<25/open/tcp/ {print $2}' smtp-servers-*.gnmap
Si realmente necesita todo esto en una sola canalización, puede hacerlo así:
nmap -p 25 --open -oG - 192.168.15.0/24 | awk '/\<25/open/tcp/ {print $2}'
Respuesta3
Necesitas una tubería para ambas grep
invocaciones:
nmap ... | grep report | grep open
O, ya que etiquetaste con awk
, solo de manera informativa:
nmap ... | awk '/report/ && /open/'
Y sed
:
nmap ... | sed '/report/!d;/open/!d'