Форум: "Сети";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Внизip адресс Найти похожие ветки
← →
Viktor (2004-05-23 15:46) [0]доброго времени суток.
подскажите пожалуйста, как получить ip адреса компов в локальной сети.
заранее признателен за помошь
← →
BiN © (2004-05-24 10:49) [1]Можно воспользоваться NetServerEnum для получения имен компьютеров. А затем по списку пройтись gethostbyname или getaddrinfo для получения ip-адресов.
← →
tesseract (2004-05-25 09:26) [2]Пошли broadcast по UDP на порт 65535. должны ответить. Главное еслли есть маски подсети правильно его послать.
← →
ISP © (2004-05-25 19:24) [3]>BiN © (24.05.04 10:49) [1]
А получить MAC address удалённого компа? Зная имя или IP?
← →
Rouse_ © (2004-05-25 21:39) [4]> [3] ISP © (25.05.04 19:24)
А ARP нам для чего?
← →
Verg © (2004-05-25 21:53) [5]
> [2] tesseract (25.05.04 09:26)
Чем и кто должны ответить, и почему? Поясти, пожалуйста.
> [3] ISP © (25.05.04 19:24)
> >BiN © (24.05.04 10:49) [1]
> А получить MAC address удалённого компа? Зная имя или IP?
А, пардон, при чем тут MAC адрес?
← →
52345262456 (2004-05-26 09:50) [6]SP © (25.05.04 19:24) [3]
>BiN © (24.05.04 10:49) [1]
А получить MAC address удалённого компа? Зная имя или IP?
Используй функцию Netbios из модуля NB30.pas
← →
tesseract © (2004-05-26 10:16) [7]2>>verg Просто пошлют байт что они есть, что-то вроде широковешательного echo.
← →
Федор Т (2004-05-26 21:35) [8]var
Form1: TForm1;
flagError: boolean;
const InitialSize = $1;
implementation
procedure TNetEnumThread.BeforeUpdate;
begin
TreeNode:=nil;
Form1.TreeView1.Items.Clear;
Form1.Button1.Enabled:=false;
end;
procedure TNetEnumThread.AfterUpdate;
begin
Form1.TreeView1.FullExpand;
Form1.Button1.Enabled:=true;
end;
procedure TNetEnumThread.Execute;
begin
FreeOnTerminate:=True;
Synchronize(BeforeUpdate);
LoadNetNode(nil);
Synchronize(AfterUpdate);
end;
procedure TNetEnumThread.AddChildNode;
begin
TreeNode:=Form1.TreeView1.Items.AddChild(TreeNode,ChildNode);
end;
procedure TNetEnumThread.LoadNetNode(NetNode: PNetResourceA);
var hEnum : THandle;
Count,BufSize: DWORD;
NR,Buf: PNetResourceA;
R: Integer;
next,add:boolean;
CurrentNode: TTreeNode;
begin
R:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,NetNode,hEnum);
if R<>NO_ERROR then exit;
BufSize:=InitialSize ; GetMem(Buf,BufSize);
try
while true do
begin
Count:=$FFFFFFFF; // I wish to read ALL items
R:=WNetEnumResource(hEnum,Count, Buf, BufSize);
if R = ERROR_MORE_DATA then // Oops ! The InitialSize is too small !
begin
Count:=$FFFFFFFF; // I wish to read ALL items
FreeMem(Buf); GetMem(Buf,BufSize);
R:=WNetEnumResource(hEnum,Count, Buf, BufSize);
end;
if R = ERROR_NO_MORE_ITEMS then break; // All items are processed
if R<>NO_ERROR then abort; // R is the error code. Process it!
NR:=Buf;
while Count>0 do
begin
CurrentNode:=TreeNode; // Remember current position
if NR.lpRemoteName<>nil then
ChildNode:=StrPas(NR.lpRemoteName)
else
ChildNode:="-";
add:=false;
next:=false;
case NR.dwDisplayType of
RESOURCEDISPLAYTYPE_NETWORK: next:=true;
RESOURCEDISPLAYTYPE_DOMAIN: begin
TreeNode:=nil;
add:=true;
next:=true;
end;
RESOURCEDISPLAYTYPE_SERVER: add:=true;
end;
if add=true then Synchronize(AddChildNode);
if next=true then LoadNetNode(NR);
if add=true then TreeNode:=CurrentNode; // restore current position
Inc(NR);
Dec(Count);
end;
end;
finally
WNetCloseEnum(hEnum); // Close handle
FreeMem(Buf); // Free memory1
end;
end;
{$R *.dfm}
Вот может пригодится, правдо тут имя хостов в локальной сети.
← →
megavolt (2004-05-27 11:01) [9]А можно поподробнее на счёёт широковещательного запроса? И какой нибудь маленький примерчик? Хотелось бы получить на выходе список компов присутствующих в сети. Т.е. IP адреса включенных компов.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.053 c