Эта статья рассказывает, как узнать, какой IP адрес имеет сетевое устройство с известным MAC адресом.
Этот вопрос чаще возникает для сетевых устройств, таких как сетевые принтеры или сетевые телекамеры. Например, мы подключили сетевой принтер или сетевую телекамеру к сети с DHCP и хотим узнать IP адрес этого устройства, но доступа к статистике DHCP сервера нет. Или на устройстве задан статический IP адрес, но мы не помним, какой именно. При этом мы знаем MAC адрес (написан на корпусе). Этот вопрос бывает актуален и для компьютеров, особенно к которым нет физического доступа.
Консольные команды определения IP адреса представлены на картинке, а далее описано, почему команды должны быть именно такими и как они работают, также приведён пример bat файла:
Способ работает на любом Windows компьтере в сети и не требует административных полномочий. Используется информация ARP кэша, производится чтение списка и поиск нужной записи.
Просмотр ARP кэша
Командная строка просмотра ARP кэша с поиском записи по определённому MAC адресу:
arp -a | find /i "01-23-45-67-89-ab"
Но, выполнив эту команду, мы можем не увидеть наше устройство.
Это происходит потому, что ARP кэш в Windows хранит записи от 15 до 45 секунд, начиная с Windows Vista: Address Resolution Protocol (ARP) caching behavior in Windows Vista TCP/IP implementations.
Наполнение ARP кэша
Поэтому перед чтением кэша необходимо заполнить его полным списком узлов сети. Это можно сделать, запустив ping на все узлы сети, например, если у нас сеть 192.168.1.1 / 255.255.255.0, то:
for /L %a in (1,1,254) do @start /b ping 192.168.1.%a -n 2 > nul
Важно, чтобы запуск ping’ов происходил как do @start /b ping, тогда
- все ping’и запускаются почти одновременно, и время выполнения цикла составит всего несколько секунд. Если написать просто do ping, т.е. без start, то цикл будет выполняться более 10 минут.
- значок @ перед start предотвращает вывод 254 команд ping
После завершения ping’ов нужно сразу запускать arp -a. Пауза более 15 секунд может привести к тому, что какие-то записи будут удалены из кэша.
Пакетный bat/cmd файл
То же решение в виде командного файла ip_by_mac.cmd с передачей MAC адреса в виде параметра будет выглядеть так:
@echo off if "%1" == "" echo no MAC address & exit /b 1 for /L %%a in (1,1,254) do @start /b ping 192.168.1.%%a -n 2 > nul ping 127.0.0.1 -n 3 > nul arp -a | find /i "%1"
Соответственно, запускаем:
ip_by_mac 01-23-45-67-89-ab
и получаем:
192.168.1.221 01-23-45-67-89-ab динамический
Ограничения
Способ работает только для тех узлов, которые отвечают на ping (icmp запросы), т.е. если у компьютера icmp echo отключен, то этот командный файл не определит его IP адрес.
Остается неудобство в том, что требуется явно указывать подсеть, а так же ограничение на подсеть – командный файл работает только для сетей 255.255.255.0.
Пример выполнения команд (видео)
Файлы для скачивания
Этот командный файл, как и другие скрипты, можно скачать по ссылке
См. также
В продолжение темы – командный файл/скрипт для любых сетей, не только /24.
Почему после введения команды появляется:
«Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.»
Трудно сказать, у меня такого не появляется.
здравствуйте, а как мне определить ip адрес устройства, которое выходило в сеть по другому юр адресу да еще и полтора года назад?
Спасибо за идею! Полезный инструмент.
Для поиска устройств в локальной сети (IP и MAC) я использую программу на Android «PingTools Network Utilities». Не раз помогала найти «потеряшек».
Единственное, смартфон или планшет по Wi-Fi должны видеть эту сеть.
Можете помочь найти утёртый телефон по МАС?
Утерянное**
Это сайт их козявит… Надо админам сказать чтоб подправили… :)
Всё уже заработало… Разобрался… Просто кавычки надо было везде поменять с «» на «» :)
Спасибо за скрипт!
На цикл пишет: Непредвиденное появление: %%a
если запускаете непосредственно из командной строки (а не из cmd файла), пишите одинарный процент вместо двойного .
подробнее см. видео.
Я бы ещё про одно неудобство указал в статье — запуск с параметром. Некоторые люди даже и не знают что это такое и с чем это едят. А так скрипт прикольный.
Если с параметром – это неудобство, как было бы удобнее? Запрос ввода мак адреса во время выполнения?
Я Ваш скрипт исправил и у меня получилось вот так:
@echo off
set /p i=»Enter MAC or IP-adress you want to find: »
if «%i%» == «» goto :eof1
for /L %%a in (1,1,254) do @start /b ping 192.168.1.%%a -n 2 > nul
ping 127.0.0.1 -n 3 > nul
arp -a | find /i «%i%»
goto :eof2
:eof1
echo «no MAC or IP-adress!»
:eof2
pause
exit /b
Теперь он у меня спрашивает что именно мне нужно найти…
Спасибо за статью…