Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно получить все Ip компов в сетке. 
V
    Опции темы
Ak47black
  Дата 21.12.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Здравствуйте.
Хочу грамотно получить все Ip компов в сетке.)
Вот такой код у меня пока вышел, (и по DRKB3_Full лазил и по сайту Rouse_)
Код

unit NetworkIps;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Winsock, ImgList, ShellAPI;

type
  TNetworkComputer = record
    Name: String;
    Ip: String;
  end;

  TNetworkComputerArr = array of TNetworkComputer;

function FindAllIpOnNetwork: TNetworkComputerArr;  

implementation

var
  NetworkComputers: TNetworkComputerArr;

function GetIPAddress(NetworkName: String): String;
var
 Error: DWORD;
 HostEntry: PHostEnt;
 Data: WSAData;
 Address: In_Addr;
begin
  Delete(NetworkName, 1, 2);
  Error:=WSAStartup(MakeWord(1, 1), Data);
  if Error = 0 then
  begin
    HostEntry:=gethostbyname(PChar(NetworkName));
    Error:=GetLastError;
    if Error = 0 then
    begin
      Address:=PInAddr(HostEntry^.h_addr_list^)^;
      Result:=inet_ntoa(Address);
    end
    else
     Result:='Error';
  end
  else
    Result:='Error';
  WSACleanup;
end;

procedure Scan(Res: TNetResource; Root: boolean);
var
 hEnum: Cardinal;
 nrResource: array[0..512] of TNetResource;
 dwSize: DWORD;
 numEntries: DWORD;
 I: DWORD;
 dwResult: DWORD;
 Ip: String;
begin
  if Root then
    dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
      0, nil, hEnum)
  else
    dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
      0, @Res, hEnum);
  if dwResult = NO_ERROR then
  begin
    dwSize := SizeOf(nrResource);
    numEntries := DWORD(-1);
    if WNetEnumResource(hEnum, numEntries, @nrResource, dwSize) = NO_ERROR then
    begin
      for i := 0 to numEntries - 1 do
      begin
        with nrResource[i] do
        begin
          if dwType = RESOURCEDISPLAYTYPE_GENERIC then
          begin
            Ip:= GetIPAddress(lpRemoteName);
            if Ip <> 'Error' then
            begin
              SetLength(NetworkComputers, Length(NetworkComputers)+1);
              NetworkComputers[Length(NetworkComputers)-1].Name:= copy(lpRemoteName, 3 , Length(lpRemoteName) -2);
              NetworkComputers[Length(NetworkComputers)-1].Ip:= Ip;
            end;
          end;
          Scan(nrResource[i], false);
        end;
        WNetCloseEnum(hEnum);
      end;
    end;
  end;
end;

function FindAllIpOnNetwork: TNetworkComputerArr;
var
  R: TNetResource;
begin
  Scan(R, True);
  Result:= NetworkComputers;
end;

end.

Работает, но свой например Ip получаю не внутренний (не который установлен в сетке), а интернетовский.
Подскажите пожалуйста, как получить правильно внутренний Ip?  smile 
(Ну и в поток надо еше загнать но это потом)

Это сообщение отредактировал(а) Ak47black - 21.12.2007, 14:53
PM MAIL   Вверх
ishimcity
Дата 27.12.2007, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 1.6.2007
Где: Тюменская область . Ишим

Репутация: нет
Всего: 1



Глянь тут http://delphiworld.narod.ru
PM MAIL ICQ Skype YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1244 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.