Как получить MAC-адрес для удаленной системы, если я знаю только его IP-адрес? - PullRequest
4 голосов
/ 27 мая 2009

Я работаю над службой Wake on LAN, которая будет запускаться с веб-сайта и должна взаимодействовать со многими различными платформами, поэтому никаких решений только для Windows. Когда пользователь регистрирует свою систему на веб-сайте, мне нужно получить MAC-адрес для использования при создании «магического» пакета . У меня есть Java-апплет, который может сделать это для меня, и я знаю об элементе управления ActiveX, который будет работать, но мне интересно, есть ли способ сделать это на стороне сервера, запрашивая маршрутизаторы / коммутаторы. Поскольку система может находиться в любой из нескольких различных физических подсетей, использование ARP не будет работать - если только у меня нет способа настроить маршрутизатор (-ы) для выполнения ARP от моего имени.

Кто-нибудь знает какие-либо сетевые API, проприетарные или иные, которые можно использовать для поиска MAC-адресов по IP-адресу? Я думаю, что мы используем маршрутизаторы Cisco, но это сложная сеть, и на разных уровнях может быть задействовано несколько поставщиков. Я хотел бы получить некоторую справочную информацию о возможных решениях, прежде чем пойти на жертву сетевым богам. Нет смысла унижать себя, если это технически невозможно. : -)

РЕДАКТИРОВАТЬ: Мы настроили сетевую инфраструктуру для разрешения направленной широковещательной передачи, хотя выясняем точный адрес широковещательной рассылки, поскольку сетевые маски не всегда / 24 - еще одна загадка, которую мне нужно решить.

Ответы [ 11 ]

4 голосов
/ 27 мая 2009

Если вы находитесь в локальной сети, которая использует DHCP, вы можете просмотреть базу данных серверов, чтобы получить MAC-адрес последнего пользователя с этим адресом. В будущем вы можете наблюдать за сетью на предмет запросов ARP и кэшировать ответы в какой-то таблице. Вы также можете использовать RMON или SNMP, чтобы попытаться запросить таблицы адресов на коммутаторах и маршрутизаторах.

Следует отметить, что для использования WoL между маршрутизаторами необходимо либо включить направленную широковещательную рассылку, либо сервер ретрансляции в локальном сегменте.

Прошло некоторое время с тех пор, как я играл в роутеры и swtiches, но это может быть отправной точкой для запроса на использование SNMP http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml

2 голосов
/ 05 января 2012

Используйте следующее:

getmac /s destIp 

Чтобы получить удаленный сеанс Mac-адрес.

1 голос
/ 23 августа 2009

В настоящее время приложение использует апплет Java 6, который позволяет мне извлекать как имя хоста, так и MAC-адрес из удаленной системы. Мне не нравится иметь эту зависимость от Java 6, но Snow Leopard и Windows обе поддерживают ее, так что я, вероятно, могу жить с ней.

В связи с этим наши сетевые специалисты обратились ко мне за помощью в преобразовании существующего кода в ASP.NET. Во время разговора я спросил, есть ли у них действующая информация о MAC-адресе (поскольку они отключают порты из-за подозрительной сетевой активности - вирусов / червей). Оказывается, они это делают, и мы можем использовать этот проект для получения доступа к информации из сетевой базы данных.

1 голос
/ 27 мая 2009

Вы сказали все, что я могу придумать ...

Исходный MAC-адрес изменяется при переходе пакета от устройства к устройству, поэтому, если клиент не находится в одной подсети, сервер не сможет получить MAC-адрес. (Вы бы сделали это через ARP)

Самым простым решением будет подписанный Java-апплет или элемент управления ActiveX. Он сможет (почти пассивно) получить всю необходимую информацию о сети (IE даже не предлагает запустить подписанный апплет)

Если вы полностью осведомлены о сети, которая использует сервис, то, возможно, вы могли бы запросить список клиентов шлюза через SNMP или CDP. Вы сможете сопоставить IP-адреса с MAC-адресами ... но это действительно зависит от поставщика (но часто) и не будет намного лучше (imo), чем апплет.

1 голос
/ 27 мая 2009

Я не знаю, может ли это быть полезным, но взгляните:

http://www.webdeveloper.com/forum/showthread.php?t=134120

http://www.qualitycodes.com/tutorial.php?articleid=19

0 голосов
/ 01 июля 2010

Как сказано выше, мы можем получить MAC-адрес с известного IP-адреса, если этот хост находится в той же подсети. Первый пинг, что IP; тогда посмотрите на arp -a | grep и проанализируйте строку в nix *, чтобы получить MAC-адрес.

Мы можем выдавать системную команду из всех стандартных языков программирования API всех языков и можем анализировать выходные данные, чтобы получить mac-адрес. Java API может пропинговать IP, но я не уверен, что мы проанализируем вывод ping (некоторые библиотеки могут это сделать). Было бы лучше избежать выдачи системной команды и найти альтернативное решение, так как это не совсем независимый от платформы способ сделать это.

Предоставлено: Профессор Салим Бхатти

0 голосов
/ 28 мая 2009

если это система Windows, вы можете использовать NBTSTAT -A это вернет информацию о netbios и IP там

любая система управления, такая как SMS или Altiris, будет иметь эту информацию

DHCP-сервер - хорошая идея

Если он локальный, вы можете пропинговать его, а затем быстро запустить ARP -a ищите IP и MAC будет там. вам может понадобиться написать небольшой командный файл.

если у вас есть доступ к ПК, вы можете использовать WMI для доступа к информации о Nic с DHCP.

0 голосов
/ 28 мая 2009

Вы можете получить записи MAC в таблице ARP только для машин в той же сети. Если вы подключитесь к машине через маршрутизатор, вы увидите только MAC-адрес маршрутизатора в таблице ARP. Таким образом, невозможно узнать MAC-адрес внешнего хоста *1002*, если только он не является хостом в той же сети (без участия маршрутизаторов).

И, кстати, есть много похожих вопросов уже на SO.

0 голосов
/ 27 мая 2009

Mac-адрес используется только в сегментах сети и теряется при каждом переходе. Только IP сохраняется для сквозного соединения - и даже тогда адрес от ip перезаписывается, когда Natted. Я предполагаю, что мой ответ невозможен, если все не находятся в одном сегменте сети, или если ваши маршрутизаторы не настроены на использование proxy arp (что не совсем реально)

0 голосов
/ 27 мая 2009

Начните жертвовать.

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

Предполагается, что исходящая система имеет только один сетевой интерфейс, поэтому имеет только один MAC-адрес.

Фактически, вы даже уверены, что ваш «волшебный пакет» (что бы это ни был) достигнет системы, к которой вы хотите, через маршрутизаторы? Это похоже на функцию, которую должны выполнять маршрутизаторы или другая сетевая инфраструктура.

...