Encuentre impresoras con Nmap

Respuestas:

37

Si desconfía de hacer huellas digitales del sistema operativo por algún motivo, puede hacer un escaneo de puertos más específico:

nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml

Eso buscará puertos comunes para impresoras y sistemas de impresión.

  • 9100 = el puerto RAW para la mayoría de las impresoras, también conocido como puerto IP directo
  • 515 = el puerto LPR / LPD, para la mayoría de las impresoras, así como para los servidores de impresión más antiguos
  • 631 = el puerto IPP, para la mayoría de las impresoras modernas y el servidor de impresión basado en CUPS

La salida está en XML.

sysadmin1138
fuente
¡Tu respuesta fue muy útil!
Ryan Tenney
Esto no funcionó para mí.
Martin Thoma
9

Esta respuesta responde a su primera pregunta directamente. Para la segunda pregunta, comprender el comando también le permitirá colocar las direcciones IP de la impresora en un archivo. Así que, aquí vamos:

nmap -p 515,631,9100 -oG - 10.81.129.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs --replace=$ipaddress snmpget -v 1 -O v -c public $ipaddress system.sysDescr.0 | sed 's/STRING:\s//'

Descripción del proceso

  1. Escanea una red buscando entidades de red que estén escuchando en los puertos predeterminados de la impresora.
  2. Usando los resultados del paso anterior, verificará la compatibilidad con SNMP en estos dispositivos.
  3. Para cada dispositivo que tiene soporte SNMP, consulta a la entidad de red para obtener una descripción del dispositivo.

Desglose de comandos

nmap : escaneo en red. ( Nmap.org )

  • -p 515,631,9100 Escanee el puerto TCP 515, 631 y 9100.
  • -oG - Use el formato de salida grep-able.
  • -sU -p 161 Busque el puerto UDP 161.

gawk o awk : procesa datos de texto orientados a columnas. Por defecto, los espacios en blanco separan la línea en columnas. ( Wikipedia )

  • gawk '/regexp/' Use la expresión regular con gawk para filtrar las líneas que coinciden con esta expresión regular.
  • gawk '{<code>}' Use el lenguaje de entrada awk tipo C para manipular la salida.
  • gawk '{/open/print $2}' Busque líneas que coincidan con "abrir" e imprima la segunda columna.

xarg - Construye y ejecuta comandos desde una entrada dada. Por defecto, los espacios en blanco separan la línea en argumentos. ( Wikipedia )

  • --delimiter='\n' Separe los argumentos por nueva línea (\ n) en lugar de espacios en blanco.
  • --replace=$ipaddressPara cada línea, almacene el argumento en $ ipaddress .

snmpget o snmpwalk : utilice la solicitud SNMP GET para consultar información sobre una entidad de red. ( net-snmp.org , más sobre SNMP en Wikipedia )

  • -c public Establecer cadena de comunidad a público.
  • -v 1 Establezca la versión SNMP en 1.
  • -O v No imprima OID.
  • system.sysDescr.0Variable a consultar. Descripción de esta variable particular: "Una descripción textual de la entidad. Este valor debe incluir el nombre completo y la identificación de la versión del tipo de hardware del sistema, el sistema operativo del software y el software de red. Es obligatorio que solo contenga caracteres ASCII imprimibles. "

sed : analiza y transforma el texto. ( Wikipedia )

  • 's/day/night/' Encuentre la primera aparición del día de la cuerda en una línea y reemplácela por la noche.
  • 's/STRING:\s//'Busque STRING: \ sy reemplácelo con nada. Esto elimina STRING: \ s de la entrada. \ s representa un espacio en blanco.

Hay algunos comandos compatibles con UNIX involucrados. Personalmente, hice que esta cadena funcionara en una máquina con Windows usando Cygwin para obtener esos comandos.

Charlie Vieillard
fuente
2
En Linux, utilicé la siguiente variación para mostrar la IP y la cadena del sistema SNMP. El '--replace = $ ipaddress' no funcionó en mi entorno:nmap -p 515,631,9100 -oG - 192.168.100.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs -I{} sh -c 'echo {} ; snmpget -v 1 -O v -c public {} system.sysDescr.0' | sed 's/STRING:\s//'
NoelProf
La versión de @NoelProf funciona muy bien en CentOS 6. Una cosa que podría mejorarse es la parte de escaneo UDP. Probé toda la cadena, pero algunas de las impresoras no se descubrieron; especialmente cuando estaban detrás de una VPN. Pensé que es porque solo probamos exactamente una vez si responden en el puerto UDP 161. Pero UDP podría perderse en el camino. Sería mejor verificarlo varias veces.
masgo
5

La forma más fácil es escanear con nmap -O: nmap generalmente determinará correctamente si una máquina es una impresora o no está basada en el sistema operativo.

nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile

Debería convertirlo en una entrada por línea y volcarlo en un archivo llamado "archivo externo". Obviamente cambie el rango de ip a cualquier rango que esté escaneando

Satanicpuppy
fuente