Вопрос или проблема
Я использую следующую команду nmap
nmap -sP 192.168.1.0/24 | awk '{print $1}'`| awk '/Nmap scan report for/{print " "$5,$6;}/MAC
Address:/{print $3;}'
которая выводит
box1.lan (192.168.1.119)
00:0E:C7:82:48:10
box2.lan (192.168.1.189)
00:E0:4F:68:01:14
как сделать так, чтобы вывод был в следующем формате
00:0E:C7:82:48:10 box1.lan 192.168.1.119
00:E0:4F:68:01:14 box2.lan 192.168.1.189
Ответ или решение
Чтобы получить данные о связанных хостах в LAN через ARP и вывести их в заданном формате, можно использовать команду nmap
вместе с утилитой awk
, что вы уже начали делать. Однако для достижения желаемого формата вывода, нам нужно немного модифицировать ваш текущий скрипт.
Ваш текущий командный обработчик выводит информацию в виде:
box1.lan (192.168.1.119)
00:0E:C7:82:48:10
box2.lan (192.168.1.189)
00:E0:4F:68:01:14
Хотите получить его в формате:
00:0E:C7:82:48:10 box1.lan 192.168.1.119
00:E0:4F:68:01:14 box2.lan 192.168.1.189
Модифицированная команда
Используйте следующий код командной строки:
nmap -sP 192.168.1.0/24 | awk '/Nmap scan report for/{printf $5," "}; /MAC Address:/{print $3}' | sed 'N;s/\n/ /;s/\((.*)\)/\1/'
Объяснение работы команды:
-
nmap -sP 192.168.1.0/24 – Эта часть команды выполняет сканирование локальной сети на наличие активных хостов. Опция
-sP
(или-sn
на более новых версиях) используется для простого пинг-сканирования. -
awk ‘/Nmap scan report for/{printf $5," "}; /MAC Address:/{print $3}’ – Этот фрагмент кода фильтрует выходные данные
nmap
./Nmap scan report for/
– Ищет строки, содержащие информацию о сканировании хостов. Мы используемprintf
для того, чтобы вывести адрес./MAC Address:/
– Ищет строки, содержащие MAC-адрес, который выводится на печать.
-
*sed ‘N;s/\n/ /;s/((.))/\1/’** – Здесь мы объединяем две строки в одну.
N
– Захватывает следующую строку.s/\n/ /
– Заменяет символ новой строки на пробел.s/\((.*)\)/\1/'
– Удаляет круглые скобки вокруг IP-адреса, чтобы получился чистый вывод.
Ожидаемый результат
При выполнении приведенной выше команды вы должны увидеть вывод в нужном формате:
00:0E:C7:82:48:10 box1.lan 192.168.1.119
00:E0:4F:68:01:14 box2.lan 192.168.1.189
Заключение
Указанная команда обеспечивает удобный и организованный способ получения и вывода информации о хостах, которые подключены к вашей локальной сети. Подобная информация может быть полезна для анализа сети и мониторинга подключенных устройств. Не забывайте проверять, что у вас есть необходимые права для выполнения сканирования в вашей локальной сети, так как это может вызвать некоторые вопросы с точки зрения безопасности.