Поиск MacAddress по IP-адресу независимо от платформы - PullRequest
5 голосов
/ 07 февраля 2012

Мне нужно узнать MAC-адрес устройства, с которого мое устройство получает TCP-запросы. Я получу IP-адрес устройства по конечной точке tcp, но мне нужно узнать MAC-адрес устройства. работать как на Windows, так и на Linux, поэтому, пожалуйста, предложите мне кросс-платформенный метод для определения MAC-адреса. Любые библиотеки Boost помогут мне сделать то же самое ??

Ответы [ 3 ]

6 голосов
/ 07 февраля 2012

Во-первых, вы не можете найти MAC-адрес для любого сетевого интерфейса, который не находится в той же локальной сети.Эта информация не передается за пределы маршрутизатора.

Существует инструмент командной строки под названием arp, доступный в Unix, а также Windows, в котором будут перечислены IP-адреса и MAC-адреса интерфейсов, которые взаимодействовали с вашим устройством.ПК.то есть

arp -a

в Windows дает что-то вроде:

Interface: 9.175.198.236 --- 0x2
  Internet Address      Physical Address      Type
  9.175.198.129         00-1b-53-46-fa-7f     dynamic

, а в Unix-подобном выглядит:

foo.bar.com (10.27.68.72) at 00:50:56:AE:00:0B [ether] on eth0
baz.bar.com (10.27.68.77) at 00:50:56:AE:00:10 [ether] on eth0
? (10.27.68.1) at 00:50:5A:1B:44:01 [ether] on eth0

Вы можете попробовать вызвать его и выполнить синтаксический анализвывод программно.

1 голос
/ 08 февраля 2012

Арп исходный код доступен по ссылке ниже, возьмите кусок кода, который вас интересует!Это код c, поэтому он должен работать нормально.

http://www.opensource.apple.com/source/network_cmds/network_cmds-328/arp.tproj/arp.c

1 голос
/ 08 февраля 2012

Первое, что нужно отметить, это то, что на уровне TCP вы не знаете MAC-адреса.

Для вашего случая, я думаю, вы можете сделать две вещи:

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

  2. напишите ваш сервер таким образом, чтобы он запрашивал эту информацию у клиента, отправляющего TCP-запрос.Это можно сделать после установления TCP.Клиент также должен иметь возможность искать MAC-адрес устройства для данного IP-адреса.

...