У меня есть маршрутизатор в режиме моста, на котором установлен Openwrt, и я хочу найти IP-адреса устройств, подключенных к маршрутизатору. Поскольку маршрутизатор находится в режиме моста, я не могу найти IP-адрес из аренды DHCP, но я могу найти MAC-адреса подключенных устройств.
Первое, что пришло в голову, это широковещательная передача по всей сети и поиск IP-адреса из ARP, но у меня это не сработало, потому что, когда я транслирую в сеть, я не могу получить ответ от некоторых устройств, и я думаю, что это может быть связано настройки брандмауэра моего модема.
Итак, мой вопрос: как я могу программно найти IP-адрес устройства с Mac-адреса?
Установите nmap на ваш роутер OpenWRT:
opkg update;opkg install nmap
Сканировать всю сеть. Например, сеть: 203.120.12.0/24.
nmap -v -sn 203.120.12.0/24 --open
Должно появиться что-то вроде этого:
Nmap scan report for 203.120.12.253
Host is up (0.00016s latency).
MAC Address: 04:18:D6:83:90:07 (Ubiquiti Networks)
Затем вы можете использовать команду grep для получения IP-адреса с MAC-адреса.
У @Nam Pham правильная идея, но вот как вы превратите его в сценарий bash, чтобы сделать это «программно»:
mac=your.mac.here
#Determine local ip address and use to get domain:
ip=`hostname -I | awk '{print $1}'`
domain=`echo $ip | sed 's/\.[^.]*$/.*/'`
nmap -sn $domain | grep $mac -B2 | head -n 1 | sed 's/.* //'
Один из способов узнать IP-адрес устройства - использовать анализатор протокола, например WireShark. Если вы захватываете достаточно трафика с сетевого интерфейса, вы должны увидеть некоторый широковещательный трафик, генерируемый практически каждым устройством в сети. Затем вы можете фильтровать пакеты с исходным MAC-адресом, соответствующим вашему маршрутизатору.
В wirehark этот фильтр будет eth.src == xx:xx:xx:xx:xx:xx
Преимущество этого метода в том, что он работает, даже если ваш маршрутизатор использует адрес вне вашей подсети.