Я создаю приложение, которое должно отслеживать подчиненные машины в локальной сети.
Я наткнулся на этот пост: Настроен для разрешения локальных IP-адресов Однако, если локальный IP-адрес, назначенный различным хостам, изменится, приложению необходимо обновить IP-адрес, на который он отправляет запросы. Я сейчас думаю о создании таблицы маршрутов в базе данных моего приложения, в которой будет храниться MAC-адрес? Затем, если IP-адрес изменится, приложение спросит у всех остальных IP-адресов в той же подсети, какой у них MAC-адрес, и изменит таблицу маршрутизации? Это правильный подход?
Вы изобретаете заново ARP Однако это не гарантирует, что у вас не всегда будет актуальная таблица ARP. Вы всегда можете запросить DHCP, если это вы имеете в виду
если локальный IP-адрес, назначенный различным хостам, изменится
Наконец, я предлагаю простые старые имена хостов, которые будут преобразованы в IP, потому что DNS-сервер, скорее всего, будет обновлен.
Это наверняка один из способов.
Другой способ - зарегистрировать каждое подчиненное устройство на хосте с каким-либо идентификатором, например, с его именем хоста: «Это мое имя, это мой IP». Итак, если он изменится, он сообщает об этом хосту.
Хотя я считаю, что это действительно вопрос для Stackoverflow.
Если я правильно понимаю, вы отслеживаете клиентов, используя MAC-адрес в качестве уникального идентификатора.
Как упоминалось выше, таблица arp (вывод arp -a) сообщит вам последние известные комбинации IP-адресов и Mac-адресов всех ПК, с которыми вы общались за последние X минут (X зависит от ОС).
Просто выполните ping "широковещательный адрес", чтобы обновить таблицу arp. Это должно дать вам большинство активных устройств в подсети. (Это не 100% защита от дурака. Вы, вероятно, пропустите пару устройств, потому что они заняты или ваш собственный сетевой стек будет перегружен из-за количества ответов и отбрасывает несколько.)
Другой вариант - получить список арендованных DHCP-серверов с DHCP-сервера, если у вас есть к нему доступ. В среде Windows команда netsh может быть очень полезной для такого рода вещей.
спросит у всех остальных ip в той же подсети, какой у них MAC-адрес
Нет - вы можете видеть только MAC-адреса локальной подсети. Вы увидите только MAC-адрес маршрутизатора (через TCP / IP) для других подсетей.
а изменить таблицу маршрутов?
!!!! даже если вы знаете MAC-адрес удаленной машины, ничего общего с таблицей маршрутизации
Ваше описание того, чего вы пытаетесь достичь, совершенно сбивает с толку.
необходимо отслеживать подчиненные машины в локальной сети
Хорошо, начнем с этого.
В сетевой модели TCP / IP и OSI нет «ведомого». Только серверы и клиенты. Сервер знает, кто является клиентом, потому что у него фиксированный адрес (и обычно IP-имя). Даже если это не так, клиент может обнаруживать серверы, исследуя открытые порты.
Альтернативный подход - модель одноранговой сети, когда имеется несколько серверов. Может существовать иерархия серверов, и в этом случае каждый сервер будет поддерживать каталог (некоторых из?) Других узлов и их положение в иерархии. Если на определенном уровне иерархии недостаточно узлов, то узел, обнаруживший это, должен запросить выбор у узлов на более низком уровне.
Подход грубой силы заключается в том, что потенциальный клиент отправляет широковещательный запрос на сервер.
Если вы говорите об аутентификации конечных точек - тогда это совершенно отдельная игра (если только все соответствующие узлы не находятся в одной VPN).