Эта статья рассказывает, как узнать, какой 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 адрес по MAC адресу
Метки:            

Определить IP адрес по MAC адресу: 8 комментариев

  • 02.02.2017 в 17:38
    Постоянная ссылка

    Спасибо за идею! Полезный инструмент.
    Для поиска устройств в локальной сети (IP и MAC) я использую программу на Android «PingTools Network Utilities». Не раз помогала найти «потеряшек».
    Единственное, смартфон или планшет по Wi-Fi должны видеть эту сеть.

    Ответить
  • 09.06.2016 в 01:56
    Постоянная ссылка

    Всё уже заработало… Разобрался… Просто кавычки надо было везде поменять с «» на «» :)
    Спасибо за скрипт!

    Ответить
    • 07.06.2016 в 19:45
      Постоянная ссылка

      если запускаете непосредственно из командной строки (а не из cmd файла), пишите одинарный процент вместо двойного .
      подробнее см. видео.

      Ответить
  • 09.03.2016 в 16:11
    Постоянная ссылка

    Я бы ещё про одно неудобство указал в статье — запуск с параметром. Некоторые люди даже и не знают что это такое и с чем это едят. А так скрипт прикольный.

    Ответить
    • 15.03.2016 в 21:01
      Постоянная ссылка

      Если с параметром – это неудобство, как было бы удобнее? Запрос ввода мак адреса во время выполнения?

      Ответить
      • 19.05.2016 в 18:16
        Постоянная ссылка

        Я Ваш скрипт исправил и у меня получилось вот так:

        @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

        Теперь он у меня спрашивает что именно мне нужно найти…
        Спасибо за статью…

        Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *