Разрешение MAC-адреса для IP-адреса с использованием C ++ в Linux - PullRequest
5 голосов
/ 19 декабря 2010

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

Что такое библиотека / функция для разрешения MAC-адреса с IP-адреса?

Ответы [ 3 ]

8 голосов
/ 19 декабря 2010

Непонятно, зачем вам MAC-адрес, поскольку он обычно обрабатывается для вас на более низком уровне.

Однако, если ваша цель находится в локальном сегменте Ethernet, вы можете использовать * 1004.* arp команда для поиска значений в локальном кэше.Если значение не кэшируется ... Ну, это проблема.Возможно, arping поможет ...

(Обычно вы отправляете пакет, например, на IP-адрес 10.10.10.10, и ваша система отправляетARP-пакет отправляет запрос 10.10.10.10, у кого есть, и ответ будет возвращаться из этой целевой системы с ее MAC-адресом, а затем он будет кэшироваться..) Или, когда система подключается к сети, она отправляет широковещательное сообщение, информирующее всех остальных о своем MAC-адресе. Естественно, если пункт назначения находится в другом сегменте Ethernet, вы направляетесь на шлюз, а не прямоадрес назначения, и MAC-адрес назначения не доступен.)

Вы можете прочитать далее:

4 голосов
/ 19 декабря 2010

Очевидно, что вы можете найти MAC-адрес только для напрямую подключенных IP-адресов, но не существует независимого от платформы способа сделать это.В Linux вы можете заглянуть в /proc/net/arp после отправки чего-либо в цель, чтобы ядро ​​отправило ARP.

Редактировать, чтобы добавить, вы также можете использовать SIOCGARP ioctl(), хотя это просто выглядитARP-кеш, поэтому он не будет отправлять ARP, если его там еще нет.

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

1 голос
/ 19 декабря 2010

Как правило, вы не можете получить MAC-адрес с IP-адреса, и фактически, поскольку IP может работать по протоколам канала передачи данных, отличным от Ethernet, некоторые IP-адреса не имеют соответствующего MAC-адреса.

MAC-адресдоступно только и относится только к одному и тому же сегменту Ethernet.В этом сегменте его можно получить по запросу ARP.

...