获取远程主机信息

BillLiao 2003-03-18 03:24:58
已知机器名或ip地址时,如何获取远程主机的网卡地址、工作组、当前登录用户名等信息?
...全文
169 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
DelphiStudy 2003-03-19
  • 打赏
  • 举报
回复
<<网冠科技>>的例子。
DelphiStudy 2003-03-19
  • 打赏
  • 举报
回复
获取网卡地址的例子:uses nb30;
NBGetAdapterAddress(a: integer): String;
Var
NC:TNCB;
ADAPTE : TADAPTERSTATUS;
LANAENU : TLANAENUM;
intId : Integer;
cR : Char;
strTem : String;

Begin

Result := '';

Try

ZeroMemory(@NC, SizeOf(NC));

NC.ncb_command:=Chr(NCBENUM);
cR := NetBios(@NC);

// Reissue enum command
NC.ncb_buffer := @LANAENU;
NC.ncb_length := SizeOf(LANAENU);
cR := NetBios(@NC);
If Ord(cR)<>0 Then
exit;

ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBRESET);
NC.ncb_lana_num := LANAENU.lana[a];
cR := NetBios(@NC);
If Ord(cR)<>0 Then
exit;
ZeroMemory(@NC, SizeOf(NC));
NC.ncb_command := Chr(NCBASTAT);
NC.ncb_lana_num := LANAENU.lana[a];
StrPCopy(NC.ncb_callname, '*');
NC.ncb_buffer := @ADAPTE;
NC.ncb_length := SizeOf(ADAPTE);
cR := NetBios(@NC);
strTem := '';
For intId := 0 To 5 Do
strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]),2);
Result := strTem;
Finally
End;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.add('本计算机的第'+edit1.text+'个适配器的MAC地址为'+NBGetAdapterAddress(StrtoInt(Edit1.Text)));
end;
工作组:
Function GetServerList(var List:TStringList ):Boolean;
var
NetResource:TNetResource;
Buf:Pointer;
Count,BufSize,Res:DWORD;
lphEnum:THandle;
p:TNetResourceArray;
i,j:Smallint;
NetworkTypeList:Tlist;
begin
result:=false;
NetworkTypelist:=Tlist.create;
List.clear;
Res:=WnetopenEnum(Resource_GLOBALNET,RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER,Nil,lphEnum);
if Res<>NO_ERROR Then exit;
Count:=$FFFFFFFF;
BufSize:=8192;
GetMem(Buf,BufSize);
Res:=WNETEnumResource(lphEnum,Count,Pointer(BUf),Bufsize);
if (Res=Error_no_more_items)
or(Res<>NO_ERROR)
Then exit;
P:=TnetResourceArray(BUf);
for i:=0 to Count-1 do
begin
networktypelist.Add(p);
inc(p);
end;
Res:=WNetCloseEnum(lphEnum);
if Res<>NO_ERROR then exit;
For j:=0 to NetWorkTypeList.Count-1 do
begin
NetResource:=TnetResource(NetworkTypeList.Items[J]^);
Res:=WNetOpenEnum(Resource_Globalnet,Resourcetype_Disk,
Resourceusage_Container,@NetResource,lphEnum);
if Res<>NO_Error then break;
While true do
begin
count:=$FFFFFFFF;
BufSize:=8192;
GetMem(Buf,BUfSize);
Res:=WNetEnumResource(lphEnum,Count,Pointer(Buf),Bufsize);
if(Res=ERROR_NO_MORE_ITEMS) or (Res<>NO_ERROR)
then break;
P:=TNetResourceArray(Buf);
For I:=0 to Count-1 do
begin
List.add(StrPas(p^.lpRemoteName));
Inc(P);
end;
end;
Res:=WNetCloseEnum(lphEnum);
if Res<>NO_ERROR then break;
end;
Result:=true;
freeMem(Buf);
NetworkTypeList.Destroy;
End;
Function TForm1.GetUsers(GroupName:string;var List:TStringList):Boolean;
Var
NetResource:TNetResource;
Buf : Pointer;
Count,BufSize,Res : DWord;
Ind : Integer;
lphEnum : THandle;
Temp:TNetResourceArray;
Begin
Result := False;
List.Clear;
FillChar(NetResource, SizeOf(NetResource), 0); //初始化网络层次信息
NetResource.lpRemoteName := @GroupName[1]; //指定工作组名称
NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//类型为服务器(工作组)
NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
NetResource.dwScope := RESOURCETYPE_DISK; //列举文件资源信息
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
If Res <> NO_ERROR Then Exit; //执行失败
While True Do //列举指定工作组的网络资源
Begin
Count := $FFFFFFFF; //不限资源数目
BufSize := 8192; //缓冲区大小设置为8K
GetMem(Buf, BufSize);//申请内存,用于获取工作组信息,获取计算机名称
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
If Res = ERROR_NO_MORE_ITEMS Then break;//资源列举完毕
If (Res <> NO_ERROR) then Exit;//执行失败
Temp := TNetResourceArray(Buf);
For Ind := 0 to Count - 1 do//列举工作组的计算机名称
Begin
List.Add(Temp^.lpRemoteName);
Inc(Temp);
End;
End;
Res := WNetCloseEnum(lphEnum);//关闭一次列举
If Res <> NO_ERROR Then exit;//执行失败
Result:=True;
FreeMem(Buf);
end;
DelphiStudy 2003-03-19
  • 打赏
  • 举报
回复
思路:获取远程主机的网卡地址、工作组、当前登录用户名等信息在客户段完成,再将结果发送给服务器端。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧