Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Список IP


Сашок ©   (2004-06-18 18:04:00) 

Привет, мастерам, заранее извиняюсь за глупый вопрос - как узнать все активные адреса в LAN (включенные компы).


Anatoly Podgoretsky   (2004-06-20 13:16:00) [1]

И надо учитывать, что комьютер может не позволить свой ИП, может нигде не быть зарегистрирован, то есть никак, физически есть в сети, лгически как бы нет, но в то же время работает, обнаружить можно за счет перехвата пакетов


Rouse_   (2004-06-20 13:13:00) [2]

> [2] Piter ©   (18.06.04 18:37)
SendARP только для NT


Сашок   (2004-06-18 20:38:00) [3]

Благодарю за помощь


Piter   (2004-06-18 18:37:00) [4]

Сашок   (18.06.04 18:04)
как узнать все активные адреса в LAN (включенные компы).


Смотреть Said ©   (18.06.04 18:26) [1], если у него правильно. То есть. просмотр доступных ресурсов в сети (если есть ресурс - то есть и компьютер на котором этот ресурс... правда, не всегда актуально, ресурс еще может быть в списке, а компьютер уже отключился).
Плюс к этому сканировать сеть... лучше всего посылать ARP запросы...


Said   (2004-06-18 18:26:00) [5]

unit Unit1;

interface

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

type
TForm1 = class(TForm)
  Button1: TButton;
  TreeView1: TTreeView;
  procedure Button1Click(Sender: TObject);
private
  { Private declarations }
public
  procedure Scan(Res: TNetResource; Root: boolean);
end;

var
Form1: TForm1;
TreeDomain: TTreeNode;
TreeServer: TTreeNode;

implementation

{$R *.dfm}

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:='Unknown';
end
else
  Result:='Error';
WSACleanup();
end;

procedure TForm1.Scan(Res: TNetResource; Root: boolean);
var
hEnum: cardinal;
nrResource: array[0..512] of TNetResource;
dwSize: DWORD;
numEntries: DWORD;
I: DWORD;
dwResult: DWORD;
begin
if Root then
  dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
    0, nil, hEnum)
else
  dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
    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
      Application.ProcessMessages;
      if Assigned(nrResource[i].lpRemoteName) then
        if nrResource[i].dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN then
          TreeDomain := TreeView1.Items.Add(nil, nrResource[i].lpRemoteName)
        else
          if nrResource[i].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then
            TreeServer := TreeView1.Items.AddChild(TreeDomain, nrResource[i].lpRemoteName + ' IP: ' + GetIPAddress(nrResource[i].lpRemoteName))
          else
            TreeView1.Items.AddChild(TreeServer, nrResource[i].lpRemoteName);
      Scan(nrResource[i], false);
    end;
  WNetCloseEnum(hEnum);
  end;
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
R:TNetResource;
begin
Scan(R, True);
end;

end.


Наверх

Титульная страница Поиск, карта сайта Написать письмо