Risposte:
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.
L'output è in XML.
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//'
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=$ipaddress
Per 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.0
Variabile 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.
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//'
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