Quelle est la meilleure façon de trouver des imprimantes sur mon réseau avec nmap? Est-il possible d'enregistrer l'adresse IP de l'imprimante dans un fichier?
Quelle est la meilleure façon de trouver des imprimantes sur mon réseau avec nmap? Est-il possible d'enregistrer l'adresse IP de l'imprimante dans un fichier?
Réponses:
Si vous vous méfiez de faire des empreintes digitales du système d'exploitation pour une raison quelconque, vous pouvez effectuer une analyse de port plus ciblée:
nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml
Cela va rechercher les ports communs aux imprimantes et aux systèmes d'impression.
La sortie est en XML.
Cette réponse répond directement à votre première question. Pour la deuxième question, la compréhension de la commande vous permettra également de mettre les adresses IP de l'imprimante dans un fichier. Alors c'est parti:
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 - Numérisation réseau. ( Nmap.org )
-p 515,631,9100
Recherchez les ports TCP 515, 631 et 9100.-oG -
Utilisez le format de sortie compatible avec grep.-sU -p 161
Recherchez le port UDP 161.gawk ou awk - Traite les données textuelles orientées colonnes. Par défaut, les espaces blancs séparent la ligne en colonnes. ( Wikipedia )
gawk '/regexp/'
Utilisez l'expression regulair avec gawk pour filtrer les lignes correspondant à cette expression regulair.gawk '{<code>}'
Utilisez le langage d'entrée awk de type C pour manipuler la sortie.gawk '{/open/print $2}'
Recherchez les lignes correspondant à «ouvert» et imprimez la deuxième colonne.xarg - Construit et exécute des commandes à partir d'une entrée donnée. Par défaut, les espaces blancs séparent la ligne en arguments. ( Wikipedia )
--delimiter='\n'
Arguments séparés par nouvelle ligne (\ n) au lieu d'espaces.--replace=$ipaddress
Pour chaque ligne, stockez l'argument dans $ ipaddress .snmpget ou snmpwalk - Utilisez la requête SNMP GET pour rechercher des informations sur une entité réseau. ( net-snmp.org , plus sur SNMP sur Wikipedia )
-c public
Définissez la chaîne de communauté sur public.-v 1
Définissez la version SNMP sur 1.-O v
N'imprimez pas OID.system.sysDescr.0
Variable à interroger. Description de cette variable particulière: "Une description textuelle de l'entité. Cette valeur doit inclure le nom complet et l'identification de la version du type de matériel du système, du système d'exploitation du logiciel et du logiciel de mise en réseau. Il est obligatoire qu'elle ne contienne que des caractères ASCII imprimables. "sed - Analyse et transforme le texte. ( Wikipedia )
's/day/night/'
Trouvez la première occurrence de la chaîne jour dans une ligne et remplacez-la par nuit.'s/STRING:\s//'
Recherchez STRING: \ s et remplacez-le par rien. Cela supprime STRING: \ s de l'entrée. \ s représente un espace.Certaines commandes prises en charge UNIX sont impliquées. Personnellement, j'ai fait fonctionner cette chaîne sur une machine Windows utilisant Cygwin pour obtenir ces commandes.
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 façon la plus simple est de numériser avec nmap -O
: nmap détermine généralement correctement si une machine est une imprimante ou non basée sur le système d'exploitation.
nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile
Doit en faire une entrée par ligne et la vider dans un fichier appelé "outfile". Modifiez évidemment la plage IP à la plage que vous numérisez