Выводить только IP-адреса онлайн-машин с nmap

19

Я знаю, как использовать, nmapчтобы найти список хостов, которые в данный момент онлайн. То, что я хотел бы сделать, это получить список только их IP-адресов, теперь он отображает дополнительную информацию, такую ​​как

Nmap scan report for 192.168.x.x' and 'Host is up (0.12s latency).

Я хотел бы иметь возможность запускать nmapкоманды, получать текстовый документ с IP-адресами, которые в данный момент находятся в сети.

Это вообще возможно?

jasonwryan
источник

Ответы:

33

Это обычный:

nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up$/{print $2}'

Краткое описание опций и команд:

  • -nотключает обратное разрешение имен, так как вам нужны только IP-адреса. В локальной сети это, пожалуй, самый медленный шаг, так что вы получите хороший прирост скорости.
  • -snозначает «Не выполнять сканирование портов». Это то же самое, что и старое, устарело -sPс мнемоническим «ping scan».
  • -oG -отправляет "grepable" вывод на стандартный вывод, который передается по каналуawk .
  • /Up$/ Выбирает только те строки, которые заканчиваются на «Вверх» и представляют хосты, которые находятся в сети.
  • {print $2} печатает второе разделенное пробелами поле, которое является IP-адресом.
bonsaiviking
источник
Почему $ после /Up? Я обнаружил, что команда nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up/{print $2}'дает те же результаты.
Майкл
1
@Michael Это просто дополнительный уровень безопасности, чтобы гарантировать, что мы не печатаем мусор в случае, если что-то еще содержит строку «Вверх». Таким образом, он работает, даже если вы запускаете его для вывода grepable в файле из другого типа сканирования, например, -sVкоторое может содержать непредсказуемые строки из баннеров сетевых служб.
Бонсайвинг
3

Вы могли бы передать это awk:

nmap -sP 192.168.1.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'
192.168.1.1
192.168.1.10
192.168.1.20
192.168.1.30
jasonwryan
источник