2010-07-29 3 views
5

Мне нужно найти MAC-адрес в локальной сети, и я использую Linux. То, что я делаю, - отправить запрос ARP с помощью libnet, но после отправки 3 запросов кеш все равно не будет обновляться. Я использую wirehark, чтобы поймать пакеты. Из wirehark я получил 3 ARP-повтора после каждого моего запроса ARP. Кто-нибудь знает, почему кеш ARP не будет обновляться?с помощью libnet для отправки запроса ARP, но кеш arp не будет обновляться после получения ответа ARP.

ответ

4

Ядро Linux не принимает нежелательный ARP по умолчанию. Поскольку запрос был отправлен вашим приложением пользователя, а не ядром, ядро ​​видит ответ как «незапрашиваемый».

Вы можете изменить это значение по умолчанию в /proc/sys/net/ipv4/conf/*/arp_accept (либо для каждого устройства, либо для всех устройств).

+0

Спасибо за быстрый ответ !!! Теперь я вижу. Тем не менее, есть ли другой способ сделать это, а затем изменить/proc/sys/net/ipv4/conf/*/arp_accept? по ioctl? – Aitjcize

+0

Зачем вам нужен другой способ? Что случилось с этим? Вы можете использовать «все» вместо *, если вы не знаете, какой интерфейс установить. – camh

+0

@Aitjcize: '/ proc/sys /' - это интерфейс для sysctl, но это * предпочтительный * интерфейс в Linux. Вы можете изменить его программно с помощью простого 'fopen(); fprintf(); fclose(); 'sequence. – caf