Trova stampanti con Nmap


Risposte:


37

Se per qualche motivo non sei sicuro di eseguire il fingerprinting del sistema operativo, puoi eseguire un port-scan più mirato:

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

Questo cercherà porte comuni a stampanti e sistemi di stampa.

  • 9100 = la porta RAW per la maggior parte delle stampanti, nota anche come porta IP diretta
  • 515 = la porta LPR / LPD, per la maggior parte delle stampanti, nonché per i server di stampa meno recenti
  • 631 = porta IPP, per la maggior parte delle stampanti moderne e server di stampa basato su CUPS

L'output è in XML.


La tua risposta è stata molto utile!
Ryan Tenney,

Questo non ha funzionato per me.
Martin Thoma,

9

Questa risposta risponde direttamente alla tua prima domanda. Per la seconda domanda, la comprensione del comando consente di inserire anche gli indirizzi IP della stampante in un file. Quindi eccoci qui:

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//'

Descrizione del processo

  1. Esegue la scansione di una rete alla ricerca di entità di rete in ascolto sulle porte predefinite della stampante.
  2. Utilizzando i risultati del passaggio precedente, verrà verificato il supporto SNMP su questi dispositivi.
  3. Per ogni dispositivo che ha il supporto SNMP richiede all'entità di rete una descrizione del dispositivo.

Ripartizione del comando

nmap - Scansione in rete. ( Nmap.org )

  • -p 515,631,9100 Scansione per porta TCP 515, 631 e 9100.
  • -oG - Usa il formato di output compatibile con grep.
  • -sU -p 161 Ricerca porta UDP 161.

gawk o awk - Elabora i dati di testo orientati alla colonna. Per impostazione predefinita, gli spazi bianchi separano la linea in colonne. ( Wikipedia )

  • gawk '/regexp/' Usa l'espressione regolare con gawk per filtrare le linee che corrispondono a questa espressione regolare.
  • gawk '{<code>}' Usa il linguaggio di input awk tipo C per manipolare l'output.
  • gawk '{/open/print $2}' Cerca le righe corrispondenti a "apri" e stampa la seconda colonna.

xarg - Crea ed esegui comandi da un determinato input. Di default gli spazi bianchi separano la linea in argomenti. ( Wikipedia )

  • --delimiter='\n' Separare gli argomenti per nuova riga (\ n) invece di spazi bianchi.
  • --replace=$ipaddressPer ogni riga, archivia l'argomento in $ ipaddress .

snmpget o snmpwalk : utilizzare la richiesta SNMP GET per eseguire query per informazioni su un'entità di rete. ( net-snmp.org , altro su SNMP su Wikipedia )

  • -c public Imposta la stringa della community su pubblica.
  • -v 1 Impostare la versione SNMP su 1.
  • -O v Non stampare OID.
  • system.sysDescr.0Variabile da interrogare. Descrizione di questa particolare variabile: "Una descrizione testuale dell'entità. Questo valore deve includere il nome completo e l'identificazione della versione del tipo di hardware del sistema, del sistema operativo del software e del software di rete. È obbligatorio che contenga solo caratteri ASCII stampabili. "

sed - Analizza e trasforma il testo. ( Wikipedia )

  • 's/day/night/' Trova la prima occorrenza del giorno della stringa in una riga e sostituiscila con la notte.
  • 's/STRING:\s//'Trova STRING: \ s e sostituiscilo con niente. Ciò rimuove STRING: \ s dall'input. \ s sta per uno spazio bianco.

Ci sono alcuni comandi supportati da UNIX coinvolti. Personalmente ho fatto funzionare questa catena su una macchina Windows usando Cygwin per ottenere quei comandi.


2
In Linux ho usato la seguente variante per mostrare l'IP e la stringa di sistema SNMP. '--Replace = $ ipaddress' non ha funzionato nel mio ambiente: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 versione di @NoelProf funziona perfettamente in CentOS 6. Una cosa che potrebbe essere migliorata è la parte di scansione UDP. Ho provato l'intera catena, ma alcune stampanti non sono state scoperte; soprattutto quando si trovavano dietro una VPN. Ho pensato che fosse perché testiamo esattamente una sola volta se rispondono sulla porta UDP 161. Ma UDP potrebbe perdersi lungo la strada. Sarebbe meglio controllarlo più volte.
Masgo,

5

Il modo più semplice è scansionare con nmap -O: nmap di solito determina correttamente se una macchina è una stampante o non è basata sul sistema operativo.

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

Dovrebbe renderlo una voce per riga e scaricarlo in un file chiamato "outfile". Ovviamente cambia l'intervallo ip in qualunque intervallo stai scansionando

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.