Відповіді:
Якщо ви чомусь хочете робити дактилоскопію ОС, ви можете зробити більш цільове сканування портів:
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 -
Використовуйте вихідний формат греп.-sU -p 161
Сканування порту UDP 161.gawk or awk - обробка текстових даних, орієнтованих на стовпці. За замовчуванням пробіли розділяють рядок на стовпці. ( Вікіпедія )
gawk '/regexp/'
Використовуйте вираз regularir за допомогою gawk, щоб відфільтрувати лінії, що відповідають цьому виразу regulair.gawk '{<code>}'
Використовуйте awk C-подібну мову вводу для маніпулювання результатами.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 -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 на будь-який діапазон, який ви скануєте