Я ищу код Linux для поиска IP-адреса с Ethernet-адреса. Я полагаю, что я должен сделать некоторый обратный ARP обман, но я не нашел ни одного примера ...Как получить IP-адрес удаленного хоста с его Ethernet-адреса?
ответ
http://compnetworking.about.com/od/networkprotocolsip/f/convertipmacadd.htm
Попробуйте отправить широковещательный IP (например, ping 192.168.1.255
если ваша подсеть 192.168.1.0/24) для простого кэша ARP, а затем arp -a
, чтобы выплюнуть все это.
Для компьютеров, с которыми вы общались, вы можете посмотреть их запись в arp. Это доступно в текстовом формате, например, в /proc/net/arp
. Поиск IP-адреса для MAC, который вы знаете, но не связанного с ним, значительно сложнее. Самое близкое совпадение, по протоколу, будет RARP, но это вряд ли когда-либо используется, поэтому вы вряд ли получите ответ.
Вы всегда можете отсканировать свою локальную подсеть, чтобы убедиться, что вы получаете полный просмотр в таблице arp. См. Например, fping
для эффективного способа сделать это. Обратите внимание, что хостам на самом деле не нужно отвечать на запросы, которые должны появляться в таблице ARP, поэтому это полезно даже при наличии локальных брандмауэров и т. Д.
@calmh ok, так что другого пути нет. Лучше ли отправлять ICMP-пакеты с помощью ping или fping или использовать что-то вроде arping? – Fred
Арпинг будет более эффективным, поскольку он избегает шага ICMP, который не нужен для ваших целей. Но в целом, fping может быть быстрее, поскольку он parallellizes больше и фактически сделан для сканирования подсети быстро. Лучшим было бы, вероятно, быстро отправить вопросы arp самостоятельно, как это делает арпинг. Сделайте один поток для отправки запросов как можно быстрее (или с разумным ограничением скорости), а другой поток прослушивает входящие ответы. Таким образом, вы могли бы получить полную картину подсети через 24 секунды. –
Вы хотите, чтобы ip-адрес с mac? – pablochan
@Fred: когда вы говорите «код Linux», вы имеете в виду код на языке программирования? Какой язык? –
Адрес Ethernet - это MAC-адрес, поэтому да - вам нужно использовать ARP/RARP для перевода между MAC и IP-адресом. –