Как получить (или создать) свободный ip адрес в локалке?
Здравствуйте, уважаемые эксперты.
Тут такая проблема. Пишу модуль для продукта, и он должен, когда запускаются приложения, которые слушают какой-то ip (читай серверы), делать так, чтобы сервер слушал другой ip.
Пример:
Запускается apache, когда он пишет вызывает функцию bind() чтобы зарегистрироваться, что он слушает 80 порт и какой то ip, а точнее тот ip, который ему дала система, а системе в свою очередь wi-fi роутер, маршрутизатор, провайдер и т.д.
У меня написан lsp провайдер, который перехватывает эти вызовы. И во время выполнения bind() меняет ip с того, что был по умолчанию, на [U]свой.[/U] Для того чтобы в систему добавить новый IP, юзаю AddIPAddress, и тогда в у моей сетевой карты появляется еще один ip адрес, но виртуальный.
Внимание, вопрос. Как мне узнать какой ip адрес добавлять? Для того чтобы быть в подсетке.
Я сначала дума,л что нужно запросить у dhcp сервера инфу, но dhcp сервер не всегда бывает.
Может, проверять диапазон ip в локалке и выбрать свободный. Подскажите, плиз!
Наверное 100%-го решения не существует. Какой-либо хост в сети может на полных правах владеть IP и при этом ничего не отправлять и даже не отвечать на ICMP.
Попробуйте в течение часа-двух помониторить ARP-таблицу локальной сети : www.rsdn.ru/forum/winapi/13779.flat
Основная масса рабочих станций в ней отметится.
Потом для гарантии можно и сканом по выявленному диапазону пройтись,
и затем снова изучить ARP-таблицу.