Как лучше всего найти принтеры в моей сети с помощью nmap? Можно ли сохранить ip принтеров в файл?
Если вы по какой-то причине опасаетесь делать отпечатки пальцев ОС, вы можете выполнить более целенаправленное сканирование портов:
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.таращиться или 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 на любой диапазон, который вы сканируете