Finden Sie Drucker mit Nmap


Antworten:


36

Wenn Sie OS Fingerprinting aus irgendeinem Grund ablehnen, können Sie einen gezielteren Port-Scan durchführen:

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

Dadurch wird nach Ports gesucht, die Druckern und Drucksystemen gemeinsam sind.

  • 9100 = der RAW-Anschluss für die meisten Drucker, auch als direkter IP-Anschluss bekannt
  • 515 = der LPR / LPD-Port für die meisten Drucker sowie für ältere Druckserver
  • 631 = der IPP-Port für die meisten modernen Drucker und CUPS-basierten Druckserver

Die Ausgabe erfolgt in XML.


Ihre Antwort war sehr hilfreich!
Ryan Tenney

Das hat bei mir nicht geklappt.
Martin Thoma

8

Diese Antwort beantwortet Ihre erste Frage direkt. Bei der zweiten Frage können Sie nach dem Verständnis des Befehls auch die IP-Adressen des Druckers in eine Datei einfügen. Auf geht's:

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

Prozessbeschreibung

  1. Es durchsucht ein Netzwerk nach Netzwerkeinheiten, die die Standard-Druckeranschlüsse überwachen.
  2. Anhand der Ergebnisse des vorherigen Schritts wird überprüft, ob diese Geräte SNMP unterstützen.
  3. Für jedes Gerät, das SNMP unterstützt, fragt es die Netzwerkeinheit nach einer Gerätebeschreibung ab.

Befehlsaufschlüsselung

nmap - Netzwerkscan. ( Nmap.org )

  • -p 515,631,9100 Suchen Sie nach den TCP-Ports 515, 631 und 9100.
  • -oG - Verwenden Sie das grep-fähige Ausgabeformat.
  • -sU -p 161 Suchen Sie nach UDP-Port 161.

gawk oder awk - Verarbeitet spaltenorientierte Textdaten. Standardmäßig wird die Zeile durch Leerzeichen in Spalten unterteilt. ( Wikipedia )

  • gawk '/regexp/' Verwenden Sie regulären Ausdruck mit gawk, um Linien herauszufiltern, die diesem regulären Ausdruck entsprechen.
  • gawk '{<code>}' Verwenden Sie die awk C-ähnliche Eingabesprache, um die Ausgabe zu bearbeiten.
  • gawk '{/open/print $2}' Suchen Sie nach Zeilen, die mit "open" übereinstimmen, und drucken Sie die zweite Spalte aus.

xarg - Erstellt Befehle und führt sie aus einer bestimmten Eingabe aus. Standardmäßig trennen Leerzeichen die Zeile in Argumente. ( Wikipedia )

  • --delimiter='\n' Trennen Sie die Argumente pro neuer Zeile (\ n) anstelle von Leerzeichen.
  • --replace=$ipaddressSpeichern Sie das Argument für jede Zeile in $ ipaddress .

snmpget oder snmpwalk - Verwenden Sie die SNMP-GET-Anforderung, um Informationen zu einer Netzwerkentität abzufragen. ( net-snmp.org , mehr über SNMP auf Wikipedia )

  • -c public Setzen Sie den Community-String auf public.
  • -v 1 Stellen Sie die SNMP-Version auf 1 ein.
  • -O v OID nicht drucken.
  • system.sysDescr.0Variable, die abgefragt werden soll. Beschreibung dieser speziellen Variablen: "Eine Textbeschreibung der Entität. Dieser Wert sollte den vollständigen Namen und die Versionsidentifikation des Hardwaretyps, des Software-Betriebssystems und der Netzwerksoftware des Systems enthalten. Es ist obligatorisch, dass diese nur druckbare ASCII-Zeichen enthalten. "

sed - Analysiert und transformiert Text. ( Wikipedia )

  • 's/day/night/' Suchen Sie das erste Vorkommen der Zeichenfolge day in einer Zeile und ersetzen Sie es durch night.
  • 's/STRING:\s//'Finde STRING: \ s und ersetze es durch nichts. Dadurch wird STRING: \ s aus der Eingabe entfernt. \ s steht für ein Leerzeichen.

Es gibt einige UNIX-unterstützte Befehle. Persönlich habe ich diese Kette auf einem Windows-Computer mit Cygwin funktionieren lassen, um diese Befehle zu erhalten.


2
Unter Linux verwendete ich die folgende Variante, um die IP- und die SNMP-Systemzeichenfolge anzuzeigen. Die '--replace = $ ipaddress' funktionierte in meiner Umgebung nicht: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

Die Version von @NoelProf funktioniert hervorragend in CentOS 6. Eine Sache, die verbessert werden könnte, ist der UDP-Scan-Teil. Ich habe die ganze Kette ausprobiert, aber einige Drucker wurden nicht entdeckt. vor allem wenn sie hinter einem VPN stecken. Ich dachte, es liegt daran, dass wir nur genau einmal testen, ob sie auf UDP-Port 161 antworten. UDP kann jedoch auf dem Weg verloren gehen. Es wäre besser, es mehrmals zu überprüfen.
Masgo

5

Der einfachste Weg ist das Scannen mit nmap -O: nmap ermittelt normalerweise korrekt, ob ein Computer ein Drucker ist oder nicht, basierend auf dem Betriebssystem.

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

Sollte einen Eintrag pro Zeile machen und in einer Datei namens "outfile" ablegen. Ändern Sie den IP-Bereich auf jeden Bereich, den Sie scannen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.