Выполнение ARP и обратного ARP в Linux 2.6.21 (glibc 2.3.5) - PullRequest
3 голосов
/ 21 января 2009

Мне нужно хранить постоянную ссылку на стороннее устройство в произвольной IP-сети, где IP-адрес устройств может быть статическим или случайным образом назначаться DHCP. Я не контролирую устройства в сети и не могу полагаться на DNS и другие специальные сетевые протоколы, существующие или работающие с устройствами.

Итак, я получил указание провести расследование с использованием аппаратных адресов и ARP. Это будет работать, но я не хочу дублировать код. Ядро должно управлять таблицей ARP. В Windows вы можете получить к нему доступ, используя GetIpNetTable и т. Д.

Я надеюсь, что есть API для ответа на эти два вопроса:

  • Как мне перевести с IP на MAC-адрес? (ARP)
  • Как мне перевести с MAC на IP-адрес? (InARP)

Если нет, то мне, возможно, придется сделать это более вручную:

  • Как мне прочитать таблицу ARP ядра?
  • Как добавить запись, если я сам определил сопоставление?

Ответы [ 3 ]

1 голос
/ 21 января 2009

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

Если вы выполните «arp -g» в Windows или «arp -a» в UNIX, вы увидите таблицу, но я не думаю, что она вам пригодится по причинам, указанным выше. Эта команда и

Это действительно то, для чего нужен DNS, но, как вы говорите, это может не подойти вам.

Возможно, вам придется написать собственную базу данных 'ARP' на уровне вашего приложения.

1 голос
/ 21 января 2009

Что касается ARP:
Вы можете использовать систему ("/ usr / bin / arp -option_of_choice"); и проанализировать вывод, но это безобразный взломать. - Не моя рекомендация.

Взгляните на /usr/include/linux/sockios.h - подробности о SIOCGARP, SIOCDARP и SIOCSARP. Это ioctl, которые вы можете выполнять для управления таблицей ARP в Linux. Конечно, вам придется выполнить эти ioctl на сокете fd. Вот несколько примеров: Примеры SIOCGARP
Я уверен, что вы можете найти много других примеров и на нескольких других языках. Как я полагаю, вы используете C.

Что касается RARP:
Цитата из man-страницы linux rarp: «Эта программа устарела. С версии 2.3 ядро ​​Linux больше не содержит поддержку RARP. Для замены демона RARP см. ftp: //ftp.demen- tia.org/pub/net-tools"
Поэтому вам нужно установить rarpd в целевой системе.

1 голос
/ 21 января 2009

/ Proc / нетто / агр

K

...