![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Узнать о кампьютерах в сети. Sockets. [D7, WinXP]
Galiaf © (2006-02-05 01:30:00)Я конечно понимаю, что бы узнать на каких компьютерах запущен сервер, то нужно пройтись по всем адресам посылать туда какие-нибудь сообщения но вот только не представляю как это можно реализовать сокетами. Может кто подскажет или я ошибаюсь вообще с направлением мыслей. Можно конечно пробовать подключаться по каждому адресу но во первых я не знаю в каком диапазоне и вообще как грамотно это делать, а во вторых я должен сперва узнать о всех серверах и только потом подключаться. Мне надо, главное узнать адреса запущенных серверов, неглавное узнать про все компы в сетке и кто подкллючен к серверу а кто нет или не запущена моя программа. Надеюсь на помощь.
Guest12 (2006-02-08 23:29:00) [1]Pardon
Korneley (2006-02-08 22:07:00) [2]Зато когда известен свой адрес и можно ограничиться только своей подсетью, тогда круг поисков гораздо меньше (если интересует только своя внутренняя сеть). Иногда поиск хоста в локалке под Win ,быстрее выполнить именно перебором, чем WNetOpenEnum и иже с ним. Особенно если сеть кривая. У меня кстати как раз такой случай.
Anatoly Podgoretsky (2006-02-08 21:38:00) [3]Если ничего неизвестно, то придется перебирать все 4 миллиарда адресов для IPv4
Korneley (2006-02-08 21:04:00) [4]Перебор адресов я делал так (использовал Indy):
Определяем свой адрес, например так
FSW := TIdStackWindows.Create;
FLocalIP := FSW.LocalAddress;
На основе своего начинаем генерить адреса своей подсети изменяя биты с самой "правой" группы адреса, складывая её XOR - ом с байтом от 0 до 255. Далее то же самое со второй справа (на каждое изменение второй - полный прогон по первой - рекурсия напрашивается :) и т.д. Каждый новый адрес пингуем
ICMP.Host := NewIP; // ICPM - тип TIdICMPClient
ICMP.ping('собственно пинг');
if ICMP.ReplyStatus.ReplyStatusType = rsEcho then begin
// здесь обрабатываем удачный пинг
// ICMP.ReplyStatus.FromIpAddress
// FSW.WSGetHostByAddr(ICMP.ReplyStatus.FromIpAddress))
// адрес и имя
end
else // неудачный пинг
Не забудь выставить таймаут ICMP поменьше (по умолчанию 5 сек. на пинг). Как возникнет ситуация на пинге типа "Адрес не роутится" - все, все адреса подсети перебраны. Да, еще нужно отсеять адреса
типа ххх.ххх.ххх.000
Про подключения не знаю, а насчет проверки своей программы, так вставить в неё агента, который по какому-нибудь порту ответит на твой запрос. Правда если ответ какой - нибудь файрвол по дороге не порежет...