Главная > Скрипты > Удалённый MAC-адрес по IP и наоборот

Удалённый MAC-адрес по IP и наоборот

Чаще всего, требуется определить именно Mac-адрес по ip, но в жизни также случаются ситуации, когда требуется узнать IP-адрес по маку. Например, у сетевого принтера не распечатывается страница настроек. Или не пингуется свежекупленный роутер: мак-адрес есть в документации, но айпишник не подходит. Не смотря на то, что узнать мак-адрес, зная IP, вроде бы не сложно, давайте всё-таки разберём оба случая.

Итак. Зная IP, нам нужно определить мак.
Условия задачи: Пусть наш компьютер имеет ip 192.168.1.2. мы будем определять мак-адрес компьютера с айпишником 192.168.1.3 , и таблицу arp-кеша мы обнулили.
Таблица arp-кеша в командной строке выводится выводится командой:
arp -a
Смотрим, что у нас есть:

192.168.1.1 — Это по всей видимости наш роутер.

Если устройство находится в той же подсети, что и наш компьютер, то после первого контакта нашего сетевого устройства с устройством удалённого узла, мы будем знать его мак-адрес. Инициировать первый контакт можно, например, пропинговав айпишник. После пинга, выводим опять таблицу arp-кеша:

Вот и нужный нам мак-адрес. Этот способ по большей части подходит для определения IP-адресов сетевого оборудования.

Если нужный нам компьютер находится вне нашей подсети, то этот способ не подойдёт. И вообще, есть более простой способ, который позволяет узнать мак-адрес — это программа GETMAC. Она может выдавать как локальный мак-адрес, так и мак удалённого компьютера. Смотрим текущий мак-адерс:

Мак удалённого компа:

Как видно, результат совпал с тем, что мы видели в таблице arp-кеша.

Заодно, приведу ещё один способ. С помощью программы psexec можно выполнять команды командой строки в контексте  другого компьютера, то есть тот же getmac или ipconfig /all:

Минусы последних двух способов — это то, что необходимо знать учётные данные удалённого компьютера, позволяющие просматривать соответствующую информацию, а так же невозможность взаимодествия с сетевым оборудованием. В данном случае ни psexec, ни getmac не запросили ничего подобного именно потому, что на удалённом компьютере была точно такая же учётка с таким же паролем.

Ещё один способ узать мак-адрес — с помощью команды nbtstat. Этот позволит узнать мак адрес  интерфейса в любой подсети, но так же не сработает с маршрутизаторами.

В ubuntu 10.10 у меня есть программа arp-scan (не входящая в базовый комплект операционной системы), с помощью которой можно выполнить подобную операцию.
sudo arp-scan --interface=eth0 192.168.1.0

Хорошо, мы определились с тем, как извлечь мак из айпишника. Как же быть наоборот? В Windows я не нашёл способа это сделать штатными средствами. В ubuntu я это сделал с помощью той же программы arp-scan, заставив пройтись прогу по диапазону айпишников на предмет соответствия мак-адреса указанному:
sudo arp-scan --interface=eth0 192.168.1.0/24 | grep 00:23:54:3d:f2:ab

Это натолкнуло меня на мысль, что надо и в windows сделать что-то подобное, т.е. тупо перебирать айпишники и резолвить их в маки, ища соответствия.

Например, powershell:
function findmac ($mac) {
$x=1,2,3,4 #подсети
$y=1..254 #компы
foreach ($lan in $x) { #перебираем подсети
$y | foreach { #перебираем компы
$comp="192.168.$lan.$_"
$ping=Get-WmiObject -Query "select * from win32_pingstatus where (address='$comp')"
if ($ping.statuscode -eq 0) { #будем выполнять поиск мака только у пингующегося ip
echo $comp #показывает над каким компом сейчас думает скрипт
if ((nbtstat -A $comp) -match $mac) { #условие - если строка с маком из Nbtstat совпала с искомым маком,
echo "$comp is $mac" # показываем что мак найден
break #завершаем выполнение
}}
}}
}

Данная функция будет работать так:

Конечно, это псевдорезолв мака в ip. Резолвим диапазон айпишников в маки и просто сравниваем полученный результат с требуемым маком. Если кто-нибудь знает более нормальный способ резолва мака в ip, пишите, не стесняйтесь, буду признателен.

  1. Алексей
    13 Март 2012 в 17:44 | #1

    Что-то так и не увидел «наоборота».
    Нет решения, где в качестве параметра какой-то проги будет стоять МАС-адрес, а на выходе будет получен IP-адрес (кстати, вовсе не обязательно совпадающий с текущей подсетью (это я про последний «способ»).
    А решение таки есть. :)

  2. Игорь
    26 Март 2012 в 17:46 | #2

    Естественно, это не «наоборот», а извращения.
    Как я уже написал, если вы знаете более нормальный способ, я был бы рад тоже его узнать. :)

  3. Markich
    10 Апрель 2012 в 09:05 | #3

    @Алексей

    «А решение таки есть.» обожаю эти бесполезные комменты.. ну раз есть, поделились бы, а то выходит «я знаю, но вам не скажу», зачем все усложнять?

  4. Андрей
    26 Июнь 2012 в 07:34 | #4

    Есть ли решение узнать мак из другой подсети не опираясь на службы windows, к примеру узнать mac адресс точки доступа.

  5. theboth
    16 Октябрь 2012 в 05:47 | #5

    глупая статья.
    ЗЫЖ colasoft mac scanner частично меня избавил от гемороя, но не полностью. пойду дальше гуглить

  6. Игорь
    17 Ноябрь 2012 в 12:39 | #6

    Судя по названию, мак сканер, наверное, делает тот же самый скан мак-адресов? :)

  7. виталий
    13 Март 2013 в 11:58 | #7

    а как сделать,чтоб чужие не смогли просмотреть мой мак-адрес?у меня роутер.

  8. Игорь
    16 Март 2013 в 07:08 | #8

    @виталий ,
    По-моему, никак.
    В модели OSI второй уровень «используется повсеместно» http://ru.wikipedia.org/wiki/ARP
    поменять — можно руками в настройках сетевой карточки. Скрыть — нет.
    Во всяком случае, в вашем сегменте сети мак-адрес точно можно определить, за роутером — нет, т.к. уже используется 3й уровень модели OSI.

  1. Пока что нет уведомлений.