Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Как просканировать сеть на наличие в ней включенных компов   Найти похожие ветки 

 
Pohil ©   (2003-09-24 12:40) [0]

Help me!!!


 
Verg ©   (2003-09-24 12:43) [1]

В "кладовку" залезь, поищи!!!


 
GH@ST ©   (2003-09-24 12:46) [2]

Пинг


 
Verg ©   (2003-09-24 12:51) [3]


> Пинг


Супер!
Все компы просто обязаны иметь установленным протокол TCP/IP, без этого протокола, конечно, сеть MS Windows жить не может...


 
Hooch ©   (2003-09-24 12:54) [4]

в Делфи компонет есть TShellTreeView показывает компы в сети, погляди исходники может поможет


 
Anatoly Podgoretsky ©   (2003-09-24 13:12) [5]

Наличии протокола тоже не является критерием для обнаружения, часто установлено "не обнаруживать компьютер"


 
Mickey   (2003-09-24 17:43) [6]

function TForm_PSW.GetContainerList(ListRoot:PNetResource):TList;
Var
TempRec : PNetRes;
Buf : Pointer;
Count,
BufSize,
Res : DWORD;
lphEnum : THandle;
p : PNetResourceArr;
i : SmallInt;
NetworkList : TList;
Begin
NetworkList := TList.Create;
Result:=nil;
BufSize := 8192;
GetMem(Buf, BufSize);
Try
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER{0}, ListRoot,lphEnum);
If Res <> 0 Then
Raise Exception(Res);
Count := $FFFFFFFF;
Res := WNetEnumResource(lphEnum, Count, Buf, BufSize);
If Res = ERROR_NO_MORE_ITEMS
Then Exit;
If (Res <> 0) Then
Raise Exception(Res);
P := PNetResourceArr(Buf);
For I := 0 To Count - 1 Do
Begin
New(TempRec);
TempRec^.dwScope := P^.dwScope;
TempRec^.dwType := P^.dwType ;
TempRec^.dwDisplayType := P^.dwDisplayType ;
TempRec^.dwUsage := P^.dwUsage ;
TempRec^.LocalName := StrPas(P^.lpLocalName);
TempRec^.RemoteName := StrPas(P^.lpRemoteName);
TempRec^.Comment := StrPas(P^.lpComment);
TempRec^.Provider := StrPas(P^.lpProvider);
NetworkList.Add(TempRec);
Inc(P);
End;
Res := WNetCloseEnum(lphEnum);
If Res <> 0 Then
Raise Exception(Res);
Result:=NetWorkList;
Finally
FreeMem(Buf);
End;
End;

procedure TForm_PSW.Button1Click(Sender: TObject);
var
List:TList;
i:integer;
begin
List:=TList.Create;
List:=GetContainerList(nil);
List:=GetContainerList(List[0]);
for i:=0 to List.Count-1 do
if PNetRes(List[i])^.RemoteName="Твой домен" then
begin
List:=GetContainerList(List[i]);
Break;
end;
for i := 0 to List.Count-1 do
ListBox1.Items.Add(PNetRes(List[i])^.RemoteName);
end;

Проверено, работает.


 
Е-Моё имя ©   (2003-09-24 17:46) [7]


> Проверено, работает.

всегда?


 
Snap ©   (2003-09-24 20:43) [8]

очевидно работало когда проверялось. А вешей которые рабоитают всегда нету.


 
Anatoly Podgoretsky ©   (2003-09-25 09:26) [9]

Он тебя спрашивает, покажет ли твой код ВСЕ ВКЛЮЧЕНЫЕ МАШИНЫ (как в вопросе), а не зарегистрированые ресурсы.


 
Толик ©   (2003-09-25 14:31) [10]

данный код покажет все зарегистрированные ресурсы, а вот для определение ВКЛЮЧЕННОЙ машины можно воспользоваться, например, ф-ей WinSock.GetHostByName и после каждого её вызова проверять WinSock.WSAGetLastError, если вернулся NULL.


 
Толик ©   (2003-09-25 14:34) [11]

прошу прощения, поторопился. GetHostByName не даёт нужного рез-та. :-((


 
GH@ST ©   (2003-09-26 13:40) [12]

>Verg ©
Умничаем...
Вообще автор не сказал для чего ищем какие компы..куда они включенные..а главное для чего он это делает...если это твоя сеть то лучше установить протокол и всетаки пинг..точнее будет...


 
icebeerg ©   (2003-09-27 10:31) [13]

А если вот это попробовать?
----------------------------
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Computer: Array [1..500] of String;
ComputerCount:Integer;

implementation

{$R *.DFM}
procedure FindAllComputers(Workgroup: String);
Var
EnumHandle : THandle;
WorkgroupRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : Cardinal;
Entries : Cardinal;
Result : Integer;
begin
ComputerCount := 0;
Workgroup := Workgroup + #0;
FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);
With WorkgroupRS do begin
dwScope := 2;
dwType := 3;
dwDisplayType := 1;
dwUsage := 2;
lpRemoteName := @Workgroup[1];
end;
WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,@WorkgroupRS,EnumHandle );

Repeat
Entries := 1;
BufSize := SizeOf(Buf);
Result:=WNetEnumResource(EnumHandle,Entries,@Buf,BufSize);
If (Result = NO_ERROR) and (Entries = 1) then begin
Inc( ComputerCount );
Computer[ ComputerCount ] := Buf[1].lpRemoteName;
end;
Until (Entries <> 1) or (Result <> NO_ERROR);
WNetCloseEnum( EnumHandle );
end;
{ Find All Computers }

procedure TForm1.Button1Click(Sender: TObject);
var
i,i2:integer;
Str1,Str2:String;
begin
FindAllComputers("Firma");
For i:=1 to ComputerCount do
Begin
Str1:=Computer[i];
Str2:="";
For i2:=1 to Length(Str1) do
If Str1[i2]<>"\" Then Str2:=Str2+Str1[i2];
Computer[i]:=Str2;
End;

For i:=1 to ComputerCount do
Begin
Str1:=Computer[i];
LIstBox1.Items.Add(Computer[i]);
End;

end;

end.



Страницы: 1 вся ветка

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
3-78818
Max_
2003-11-04 11:02
2003.11.24
Из XML файла сохранить в базу данных?


14-79158
ИдиотЪ
2003-10-31 11:09
2003.11.24
откуда берутся идиоты?


1-78884
Maks Realov
2003-11-12 19:51
2003.11.24
Динамические массивы в Паскале - структура?


4-79221
w666w
2003-09-30 12:29
2003.11.24
TerminateThread - почему не работает?


8-79063
9351561
2003-07-20 01:31
2003.11.24
Как определить время