Znajdź drukarki z Nmap

Odpowiedzi:

37

Jeśli z jakiegoś powodu jesteś ostrożny w pobieraniu odcisków palców systemu operacyjnego, możesz wykonać bardziej ukierunkowane skanowanie portów:

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

Spowoduje to skanowanie portów wspólnych dla drukarek i systemów drukowania.

  • 9100 = port RAW dla większości drukarek, znany również jako port bezpośredni IP
  • 515 = port LPR / LPD dla większości drukarek, a także starszych serwerów wydruku
  • 631 = port IPP dla większości nowoczesnych drukarek i serwer wydruku oparty na CUPS

Dane wyjściowe są w formacie XML.

sysadmin1138
źródło
Twoja odpowiedź była bardzo pomocna!
Ryan Tenney,
To mi nie zadziałało.
Martin Thoma,
9

Ta odpowiedź odpowiada na twoje pierwsze pytanie bezpośrednio. W przypadku drugiego pytania zrozumienie polecenia pozwoli również umieścić adresy IP drukarki w pliku. Więc zaczynamy:

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

Opis procesu

  1. Skanuje sieć w poszukiwaniu jednostek sieciowych nasłuchujących na domyślnych portach drukarki.
  2. Korzystając z wyników poprzedniego kroku, sprawdzi obsługę SNMP na tych urządzeniach.
  3. Dla każdego urządzenia, które obsługuje SNMP, wysyła zapytanie do jednostki sieciowej o opis urządzenia.

Podział poleceń

nmap - Skanowanie sieciowe. ( Nmap.org )

  • -p 515,631,9100 Wyszukaj port TCP 515, 631 i 9100.
  • -oG - Użyj formatu wyjściowego grep.
  • -sU -p 161 Wyszukaj port UDP 161.

gawk lub awk - Przetwarza dane tekstowe zorientowane na kolumny. Domyślnie białe znaki dzielą linię na kolumny. ( Wikipedia )

  • gawk '/regexp/' Użyj wyrażenia regulair z gawk, aby odfiltrować linie pasujące do wyrażenia regulair.
  • gawk '{<code>}' Użyj języka wejściowego podobnego do awk C, aby manipulować danymi wyjściowymi.
  • gawk '{/open/print $2}' Wyszukaj wiersze pasujące do „open” i wydrukuj drugą kolumnę.

xarg - Buduj i wykonuj polecenia z podanych danych wejściowych. Domyślnie białe znaki dzielą linię na argumenty. ( Wikipedia )

  • --delimiter='\n' Oddzielne argumenty dla nowej linii (\ n) zamiast białych znaków.
  • --replace=$ipaddressDla każdej linii przechowuj argument w $ ipaddress .

snmpget lub snmpwalk - Użyj żądania SNMP GET do zapytania o informacje na temat jednostki sieciowej. ( net-snmp.org , więcej o SNMP na Wikipedii )

  • -c public Ustaw ciąg społeczności na publiczny.
  • -v 1 Ustaw wersję SNMP na 1.
  • -O v Nie drukuj OID.
  • system.sysDescr.0Zmienna do zapytania. Opis tej konkretnej zmiennej: „Tekstowy opis encji. Ta wartość powinna zawierać pełną nazwę i identyfikację wersji typu sprzętu systemu, systemu operacyjnego oprogramowania i oprogramowania sieciowego. Obowiązkowe jest, aby zawierały tylko drukowalne znaki ASCII. „

sed - Analizuje i przekształca tekst. ( Wikipedia )

  • 's/day/night/' Znajdź pierwsze wystąpienie ciągu dnia w wierszu i zamień je na noc.
  • 's/STRING:\s//'Znajdź STRING: \ s i zastąp go niczym. Spowoduje to usunięcie STRING: \ s z danych wejściowych. \ s oznacza biały znak.

W grę wchodzi kilka poleceń obsługiwanych przez system UNIX. Osobiście sprawiłem, że ten łańcuch działa na komputerze z systemem Windows za pomocą Cygwin, aby uzyskać te polecenia.

Charlie Vieillard
źródło
2
W systemie Linux użyłem następującej odmiany, aby wyświetlić adres IP i ciąg systemowy SNMP. Opcja „--replace = $ ipaddress” nie działała w moim środowisku: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
Wersja @NoelProf działa świetnie w CentOS 6. Jedną z rzeczy, które można poprawić, jest część skanowania UDP. Próbowałem całego łańcucha, ale niektóre drukarki nie zostały odkryte; szczególnie gdy są za VPN. Uznałem, że dzieje się tak, ponieważ testujemy tylko raz, jeśli odpowiedzą na porcie UDP 161. Ale UDP może się zgubić po drodze. Lepiej byłoby to sprawdzić wiele razy.
masgo,
5

Najłatwiejszym sposobem jest skanowanie za pomocą nmap -O: nmap zwykle poprawnie określa, czy maszyna jest drukarką, czy nie jest oparta na systemie operacyjnym.

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

Powinien to zrobić jeden wpis w wierszu i zrzucić go do pliku o nazwie „outfile”. Oczywiście zmień zakres ip na dowolny skanowany zakres

Satanicpuppy
źródło