Trouver des imprimantes avec Nmap

26

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?

NiklasS
la source
Cette page peut vous aider. Cela a fonctionné pour moi dans le passé. irongeek.com/i.php?page=security/networkprinterhacking
ThaKidd KG5ORD

Réponses:

37

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.

  • 9100 = le port RAW pour la plupart des imprimantes, également appelé port IP direct
  • 515 = le port LPR / LPD, pour la plupart des imprimantes, ainsi que pour les serveurs d'impression plus anciens
  • 631 = le port IPP, pour la plupart des imprimantes modernes, et un serveur d'impression basé sur CUPS

La sortie est en XML.

sysadmin1138
la source
Votre réponse a été très utile!
Ryan Tenney
Cela n'a pas fonctionné pour moi.
Martin Thoma
9

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

Description du processus

  1. Il analyse un réseau à la recherche d'entités réseau qui écoutent sur les ports d'imprimante par défaut.
  2. En utilisant les résultats de l'étape précédente, il vérifiera la prise en charge SNMP sur ces périphériques.
  3. Pour chaque périphérique prenant en charge SNMP, il demande à l'entité réseau une description du périphérique.

Répartition des commandes

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=$ipaddressPour 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.0Variable à 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.

Charlie Vieillard
la source
2
Sous Linux, j'ai utilisé la variante suivante pour afficher l'IP et la chaîne système SNMP. Le '--replace = $ ipaddress' ne fonctionnait pas dans mon environnement: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 version de @NoelProf fonctionne très bien dans CentOS 6. Une chose qui pourrait être améliorée est la partie de numérisation UDP. J'ai essayé toute la chaîne, mais certaines imprimantes n'étaient pas découvertes; surtout quand ils étaient derrière un VPN. J'ai pensé que c'est parce que nous ne testons qu'une seule fois s'ils répondent sur le port UDP 161. Mais UDP pourrait se perdre en cours de route. Il serait préférable de le vérifier plusieurs fois.
masgo
5

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

Satanicpuppy
la source