2010-03-20 6 views
3

Я ищу код Linux для поиска IP-адреса с Ethernet-адреса. Я полагаю, что я должен сделать некоторый обратный ARP обман, но я не нашел ни одного примера ...Как получить IP-адрес удаленного хоста с его Ethernet-адреса?

+0

Вы хотите, чтобы ip-адрес с mac? – pablochan

+0

@Fred: когда вы говорите «код Linux», вы имеете в виду код на языке программирования? Какой язык? –

+0

Адрес Ethernet - это MAC-адрес, поэтому да - вам нужно использовать ARP/RARP для перевода между MAC и IP-адресом. –

ответ

2

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

Вы всегда можете отсканировать свою локальную подсеть, чтобы убедиться, что вы получаете полный просмотр в таблице arp. См. Например, fping для эффективного способа сделать это. Обратите внимание, что хостам на самом деле не нужно отвечать на запросы, которые должны появляться в таблице ARP, поэтому это полезно даже при наличии локальных брандмауэров и т. Д.

+0

@calmh ok, так что другого пути нет. Лучше ли отправлять ICMP-пакеты с помощью ping или fping или использовать что-то вроде arping? – Fred

+0

Арпинг будет более эффективным, поскольку он избегает шага ICMP, который не нужен для ваших целей. Но в целом, fping может быть быстрее, поскольку он parallellizes больше и фактически сделан для сканирования подсети быстро. Лучшим было бы, вероятно, быстро отправить вопросы arp самостоятельно, как это делает арпинг. Сделайте один поток для отправки запросов как можно быстрее (или с разумным ограничением скорости), а другой поток прослушивает входящие ответы. Таким образом, вы могли бы получить полную картину подсети через 24 секунды. –