Открытие соседа C - PullRequest
       5

Открытие соседа C

0 голосов
/ 19 июля 2011

Мне нужно обнаружить всех сетевых соседей в Linux (они тоже работают под Linux), и мне нужно получить их IP-адреса (3-й уровень). Есть идеи как это сделать?

Кстати, мне нужно сделать это в C, а не в shell

Большое спасибо заранее!

Ответы [ 3 ]

2 голосов
/ 19 июля 2011

Что вы должны сделать, это сделать так, чтобы соседи запустили демон, который отвечает (одноадресным ответом отправителю) на многоадресную передачу UDP.

Затем отправьте многоадресную UDP-рассылку с TTL, равным 1 (чтобы он не маршрутизировался), и прослушайте, чтобы узнать, кто отвечает. Вы будете получать ответы только от соседей, на которых работает агент.

Другая возможность - использовать существующий протокол, который уже делает это, например, mDNS.

1 голос
/ 19 июля 2011

Нет гарантированного способа сделать это, если рассматриваемые машины не взаимодействуют.

Лучшее, что вы можете сделать, - это сканировать вероятные адреса и проверять каждый из них, чтобы выяснить, можете ли вы получить ответ - это может быть что угодно, от простого эхо-запроса ICMP (ping) до сложного искаженного пакета, который пытается получить ответ от удаленного хоста.

Требуемый уровень сложности и то, сработает ли он вообще, полностью зависит от того, насколько сильно огненостен и т.д., о котором идет речь.

Как уже заметил комментатор, есть целые программы, такие как nmap, посвященные попыткам обнаружить эту информацию, что дает некоторое представление о том, насколько это может быть нетривиально.

С другой стороны, если хосты взаимодействуют, тогда может быть достаточно простого широковещательного ICMP-запроса.

0 голосов
/ 19 июля 2011

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

Получив список соседей по ссылкам, вы можете попытаться выяснить их IP-адреса, но помните, что они могут иметь много иливовсе нет.Для этого вам понадобится какой-нибудь обратный ARP.Возможно, ваш маршрутизатор поддерживает список ассоциаций MAC-to-IP, и вы можете запросить его (опять же, SNMP будет наиболее удобным решением).

...