Назад | Перейти на главную страницу

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

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

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

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

Это просканирует порты, общие для принтеров и систем печати.

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

Вывод в XML.

Этот ответ напрямую отвечает на ваш первый вопрос. Что касается второго вопроса, понимание команды позволит вам также поместить 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.

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

  • gawk '/regexp/' Используйте выражение regularair с gawk, чтобы отфильтровать строки, соответствующие этому выражению regularair.
  • gawk '{<code>}' Используйте язык ввода, подобный C awk, для управления выводом.
  • 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 для получения этих команд.

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

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

Следует сделать одну запись в строке и выгружать ее в файл с именем «outfile». Очевидно, измените диапазон ip на любой диапазон, который вы сканируете