Получите живые хосты MAC в локальной сети - PullRequest
2 голосов
/ 05 февраля 2011

Привет, я работаю над небольшим bash-скриптом, который будет сканировать локальные сети каждые 5 минут, получать действующий хост и затем получать их MAC-адреса.

Пока у меня есть это:

nmap -sP -n -oG - 10.0.0.1-20 | grep "Up" | awk '{print $2}'

Что дает мне IP-адреса. Теперь я должен сделать что-то вроде

arp -an | grep 'ip'

но я новичок в bash и не знаю как:)

Ответы [ 4 ]

4 голосов
/ 05 февраля 2011

Вот скрипт, который делает именно то, что вы хотите:

#!/bin/bash

HOSTS=$(nmap -sP -n -oG - 192.168.1.1-10 | grep "Up" | awk '{print $2}')

for host in ${HOSTS}; do
  arp -an | grep ${host} | awk '{print $2 $4}'
done
2 голосов
/ 05 февраля 2011

Попробуйте использовать arp-scan, например:

sudo arp-scan --interface=wlan0 192.168.1.0/24
0 голосов
/ 19 февраля 2015

Этот выводит все записи в формате greppable:

nmap -n -sP 10.0.3.0/24 | awk '/Nmap scan report/{printf $5;printf " ";getline;getline;print $3;}'

Кажется, он работает также для IP / MAC, которые еще не находятся в таблице ARP хостов.Это хорошая вещь.В моей системе скрипт из принятого ответа показывает только хосты, перечисленные в таблице ARP ...

Результаты:

10.0.3.100 B8:27:EB:8E:C5:51
10.0.3.101 00:26:B6:E1:4B:EB
10.0.3.112 00:01:29:02:55:25
etc..
0 голосов
/ 27 марта 2013

Для второй части запроса вы можете использовать arping:

for host in $(nmap -sP -n -oG - 192.168.83.1-35 | grep "Up" | awk '{print $2}');
    do arping $host -c 1;
done
...