1

Я хочу сканировать свою сеть; и вернуть вывод, как это:

Сетевое сканирование на 192.168.0.*

192.168.0.1 компьютер1

192.168.0.2 компьютер2

192.168.0.3 компьютер5

echo Network Scan
nmap -sP -n <network> | awk '{print  $5}NF == 6{print $6}'

Как я могу изменить код, который мне уже нужен, чтобы включить только IP и имя хоста?

1 ответ1

2

Нормальный вывод Nmap не подходит для анализа, так как он варьируется от версии к версии и не использует согласованные разделители или ширину поля. Лучшим подходом было бы использовать XML или вывод Grepable . Самым быстрым и простым для вас было бы выбрать вывод Grepable с -oG и отправить вывод в STDOUT для обработки с помощью awk:

nmap -sn 192.168.0.0/24 -oG - | awk '$4=="Status:" && $5=="Up" {print $2, $3}'

Обратите внимание, что эта команда использует новую (начиная с Nmap 5.10BETA1 в ноябре 2009 г.) опцию -sn вместо старой (но все еще поддерживаемой) -sP для обозначения «только обнаружение хоста». Также я удалил опцию -n , так как вас интересуют имена хостов. Без обратного разрешения имен вы не сможете получить желаемый результат.

Из-за того, как работает разрешение имен (и Nmap может использовать несколько источников для информации об именах), может быть несколько имен хостов для конкретного IP-адреса. Вывод Grepable устарел, поскольку он не может передать всю информацию (такую как множественные имена хостов, выходные данные сценариев NSE, информацию о трассировке и т.д.), Которую создает Nmap. Если вы хотите более полное решение, вы должны использовать вывод XML. Вот пример использования xmlstarlet для разбора вывода XML:

nmap -sn 192.168.0.0/24 -oX - | xmlstarlet sel -t -m "//host/status[@state='up']/.." -v "address[@addrtype='ipv4']/@addr" -o " " -v "hostnames/hostname/@name" -n

Или распечатать строку для каждого имени хоста (включая IP-адреса с несколькими именами хостов):

xmlstarlet sel -t -m "//host/status[@state='up']/../hostnames/hostname" -v "../../address[@addrtype='ipv4']/@addr" -o " " -v "@name" -n

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .