Ответы:
Если вы по какой-то причине опасаетесь использовать OS Fingerprinting, вы можете выполнить более целенаправленное сканирование портов:
nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml
Это будет сканировать порты, общие для принтеров и систем печати.
Вывод в формате 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//'
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 для получения этих команд.
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//'
Самым простым способом является сканирование с помощью nmap -O
: nmap обычно правильно определяет, является ли машина принтером или нет на основе ОС.
nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile
Следует сделать по одной записи в строке и вывести ее в файл с именем «outfile». Очевидно, измените диапазон ip на любой диапазон, который вы сканируете