Знайдіть принтери за допомогою Nmap


Відповіді:


37

Якщо ви чомусь хочете робити дактилоскопію ОС, ви можете зробити більш цільове сканування портів:

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

Це сканує наявність портів, загальних для принтерів та систем друку.

  • 9100 = порт RAW для більшості принтерів, також відомий як порт прямого IP
  • 515 = порт LPR / LPD для більшості принтерів, а також старих серверів друку
  • 631 = порт IPP для більшості сучасних принтерів та сервер друку на основі CUPS

Вихід є в XML.


Ваша відповідь була дуже корисною!
Райан Тенні

Це для мене не вийшло.
Мартін Тома

9

Ця відповідь відповідає безпосередньо на ваше перше запитання. Щодо другого питання, розуміння команди дозволить вам також помістити IP-адреси принтера у файл. Отже, ми йдемо:

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

Опис процесу

  1. Він сканує мережу, шукаючи мережеві об'єкти, які слухають у портах принтера за замовчуванням.
  2. Використовуючи результати попереднього кроку, він перевірить підтримку SNMP на цих пристроях.
  3. Для кожного пристрою, який підтримує SNMP, він запитує мережевий об'єкт для опису пристрою.

Розбивка команд

nmap - Мережеве сканування. ( Nmap.org )

  • -p 515,631,9100 Сканування портів TCP 515, 631 та 9100.
  • -oG - Використовуйте вихідний формат греп.
  • -sU -p 161 Сканування порту UDP 161.

gawk or awk - обробка текстових даних, орієнтованих на стовпці. За замовчуванням пробіли розділяють рядок на стовпці. ( Вікіпедія )

  • gawk '/regexp/' Використовуйте вираз regularir за допомогою gawk, щоб відфільтрувати лінії, що відповідають цьому виразу regulair.
  • gawk '{<code>}' Використовуйте awk C-подібну мову вводу для маніпулювання результатами.
  • gawk '{/open/print $2}' Шукайте рядки, що відповідають "відкритій", і друкуйте другий стовпчик.

xarg - Створення та виконання команд із заданого вводу. За замовчуванням пробіли розділяють рядок на аргументи. ( Вікіпедія )

  • --delimiter='\n' Окремі аргументи для нового рядка (\ n) замість пробілу.
  • --replace=$ipaddressДля кожного рядка зберігайте аргумент у $ ipaddress .

snmpget або snmpwalk - використовуйте запит SNMP GET для запиту інформації про мережевий об'єкт. ( net-snmp.org , докладніше про SNMP у Вікіпедії )

  • -c public Встановіть рядок спільноти для загальнодоступних.
  • -v 1 Встановіть версію SNMP на 1.
  • -O v Не друкуйте OID.
  • system.sysDescr.0Змінна для запиту. Опис цієї конкретної змінної: "Текстовий опис сутності. Це значення повинно містити повне ім'я та ідентифікацію версії типу апаратного забезпечення системи, операційної системи програмного забезпечення та мережевого програмного забезпечення. Обов'язково, щоб вона містила лише друковані символи ASCII. "

sed - Розбирає та перетворює текст. ( Вікіпедія )

  • 's/day/night/' Знайдіть перший рядок дня рядка в рядку та замініть його на ніч.
  • 's/STRING:\s//'Знайдіть STRING: \ s і замініть його нічим. Це видаляє STRING: \ s з входу. \ s означає пробіл.

Задіяні деякі підтримувані UNIX команди. Особисто я змусив цю ланцюжок працювати на машині Windows, використовуючи Cygwin для отримання цих команд.


2
У Linux я використав наступний варіант, щоб показати IP та рядок SNMP системи. "- замінити = $ ipaddress" не працював у моєму середовищі: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

Версія @NoelProf чудово працює в CentOS 6. Одне, що можна вдосконалити - це скануюча частина UDP. Я спробував цілу ланцюжок, але деяких принтерів де не виявив; особливо коли вони де за VPN. Я зрозумів, що це тому, що ми перевіряємо рівно один раз, якщо вони відповідуть на порту UDP 161. Але UDP може загубитися на шляху. Краще було б перевірити це кілька разів.
масго

5

Найпростіший спосіб - сканування за допомогою nmap -O: nmap зазвичай правильно визначає, чи машина є принтером чи не заснована на ОС.

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

Слід зробити один запис у рядку та скинути його у файл під назвою "outfile". Очевидно, змініть діапазон ip на будь-який діапазон, який ви скануєте

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.