Поиск компьютеров в сети. Часть 1

4 минуты на чтение

Здравствуйте, в этой статье я хотел бы поговорить о том как можно найти компьютеры в сети, это является довольно распространенной проблемой. В первой части нашей статьи мы будем использовать стандартный компонент, а в следующей части мы будем использовать компонент из библиотеки ICS. Да конечно первая часть мне больше нравится, так как компоненты стандартные, ничего нового искать не требуется и устанавливать, а вот ICS в каком-то роде библиотека мощная, так что для ознакомительных целей мы также ею воспользуемся, но нам придется ее дополнительно установить. Что касается стандартного компонента, то он входит в состав Indy, также довольно мощная библиотека. Вообще, как можно найти компьютеры в сети?  Наверное самый простой и довольно распространенный способ — это проверить диапазон ip-адресов сети на существование, диапазон может задать, например, пользователь, а можно сделать: определить ip-адрес свой, затем мы будем знать начало ip-адресов и с самого первого до 255 пройтись и отправить запросы на них. Конечно ip-адреса не обязательно могут совпадать, но это довольно часто бывает, что, например 20 компьютеров в сети и у них одинаковое начало ip-адресов (номер сети). Затем нам просто на каждый адрес необходимо отправить запрос и проверить, что он нам вернет, если что-то вернет, то значит ip-адрес существует и добавляем его в список наш, а точнее мы будем пинговать ip-адреса. Данная функция есть в Windows, Вы спокойно можете пропинговать любой ip-адрес, либо домен.

Как видите алгоритм поиска очень просто, но данный метод довольно медленный, конечно все зависит от размера вашей локальной вычислительной сети. Ну а теперь поговорим о самом компоненте, с которым мы будем работать. Данный компонент, как говорилось раньше входит в состав библиотеки Indy и находиться во вкладке — Indy Clients, а называется он — TIdIcmpClient. Данный компонент как раз предоставляет нам такую возможность как пинговать конкретный хост. К нашей задачи нам это определенно подходит. Что нам необходимо, чтобы пинговать какой-то хост, соответственно имя хоста, затем размер пакета, который мы будем отправлять на хост, а также при необходимо порт и TimeOut.

Все это мы будем перечислять при отправке. Так как сети у меня нету и полностью просканировать и протестировать у себя не смогу, поэтому я буду задавать свой конкретный хост, можно локальный (localhost), можно свой ip-адрес. Для того, чтобы просканировать всю сеть, вам необходимо циклом пройтись по заданному диапазону ip-адресов и добавить, которые пингуются, мы рассмотрим на конкретном ip-адресе, на локальном. В итоге на форме у меня следующие компоненты

  • TButton
  • TListBox

В TListBox мы будем выводить найденные ip-адреса, сети (в нашем случае должен появиться один ip-адрес, так как нету у меня сети). На событие OnClick кнопки я написал следующий код

procedure TForm1.Button1Click(Sender: TObject);
begin
   IdIcmpClient1.Host:='127.0.0.1';
   IdIcmpClient1.ReceiveTimeout:=1000;
   IdIcmpClient1.Ping('32');
   Caption:=IntToStr(IdIcmpClient1.ReplyStatus.MsRoundTripTime);
end;

Итак, что мы делаем, задаем имя хоста, затем TimeOut, через сколько прекращать отправку пакета, далее с помощью метода Ping мы отправляем пакет, при необходимо указываем размера пакет (не обязательный параметр), а в Caption (заголовок) нашего окна выводим время в миллисекундах за сколько наш пакет размером 32 байта был отправлен на хост. Далее выделяем наш компонент TIdIcmpClient. Далее переходим в список событий данного компонента и выбираем событие OnReply. После чего на данное событие пишем следующий код:

procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
begin
   try
    if IdIcmpClient1.Host=AReplyStatus.FromIpAddress then
     ListBox1.Items.Add (AReplyStatus.FromIpAddress);
   except
    on e:Exception do
     //-//-//-//-//-//-//
   end;
end;

Что мы тут делаем, просто проверяем на существование наши хосты, если он существует, то добавляем в список, если нет, то ничего не делаем, обычно если не существует хост, то в AReplyStatus.FromIpAddress будет хост типа 0.0.0.0.

Для того, чтобы нам просканировать сеть, то мы на событие OnClick кнопки в цикле пингуем все наши хосты, а данное событие остается, которое каждый хост будет проверять на существование. Теперь мы знаем ip-адреса всей сети, только тех компьютеров, которые естественно включены в сеть. Ну а дальше мы рассмотрим как тоже самое сделать с помощью библиотеки ICS, а также как по ip-адресу узнать имя компьютера.

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

В продолжении статьи по поиску компьютеров в сети, а также для проверки соединения с другим компьютером или сервером, то есть для проверки их доступности в сети (пингование) я решил написать данную статью. Для этого я подготовил похожий пример, но уже с исполь...
Здравствуйте, в этой статье, я хотел бы поговорить о том, как можно реализовать поиск слов, строк и так далее, в компонентах TRichEdit и TMemo. С данными компонентами Вы уже работали, так что нам не составит труда организовать поиск, который я задумал. Итак, ч...
Всем доброго времени суток! Продолжаем цикл статей по MapWindow GIS в Delphi. На этот раз, как и обещал, будем учиться, как организовать поиск на слоях (то есть картах). Поиск будем организовывать следующим образом: Пользователь выбирает, в каком поле искать ...