Найти принтеры с Nmap


Ответы:


37

Если вы по какой-то причине опасаетесь использовать OS Fingerprinting, вы можете выполнить более целенаправленное сканирование портов:

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 - Используйте grep-способный формат вывода.
  • -sU -p 161 Сканирование на наличие UDP-порта 161.

gawk или awk - обрабатывает текстовые данные, ориентированные на столбцы. По умолчанию пробелы разделяют строку на столбцы. ( Википедия )

  • gawk '/regexp/' Используйте выражение regulair с gawk, чтобы отфильтровать строки, соответствующие этому выражению regulair.
  • gawk '{<code>}' Используйте C-подобный язык ввода awk для управления выводом.
  • gawk '{/open/print $2}' Найдите строки, соответствующие «open», и напечатайте второй столбец.

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. '--Replace = $ 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.