Respuestas:
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.
La salida está en XML.
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//'
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=$ipaddress
Para 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.0
Variable 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.
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//'
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