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

26

Каков наилучший способ найти принтеры в моей сети с помощью nmap? Можно ли сохранить ip принтеров в файл?

NiklasS
источник
Эта страница может вам помочь. Это сработало для меня в прошлом. irongeek.com/i.php?page=security/networkprinterhacking
ThaKidd KG5ORD

Ответы:

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.

sysadmin1138
источник
Ваш ответ был очень полезным!
Райан Тенни
Это не сработало для меня.
Мартин Тома
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 на любой диапазон, который вы сканируете

Satanicpuppy
источник