如何获得局域网内某一台机器的网卡地址?注意:不是程序运行所在机器。比如,客户机获得服务器的网卡地址。

解决方案 »

  1.   

    用SDK中提供的函数,如NetServerGetInfo
      

  2.   

    《超级猛料》上有下面的一段用来做主机名到IP地址的转换。
    将某一主机域名解析为IP地址。 
    使用 WinSock 单元;过程如下:function HostToIP(Name: string; var Ip: string): Boolean;varwsdata : TWSAData;hostName : array [0..255] of char;hostEnt : PHostEnt;addr : PChar;beginWSAStartup ($0101, wsdata);trygethostname (hostName, sizeof (hostName));StrPCopy(hostName, Name);hostEnt := gethostbyname (hostName);if Assigned (hostEnt) thenif Assigned (hostEnt^.h_addr_list) then beginaddr := hostEnt^.h_addr_list^;if Assigned (addr) then beginIP := Format ('%d.%d.%d.%d', [byte (addr [0]),byte (addr [1]), byte (addr [2]), byte (addr [3])]);Result := True;endelseResult := False;endelseResult := Falseelse beginResult := False;end;finallyWSACleanup;endend;
     
      

  3.   

    //取网卡地址(MAC)列表
    procedure NBGetMac(Strings: TStrings);
    var
      NCB: TNCB;
      Adapter: TAdapterStatus;
      LanaEnum: TLanaEnum;
      I, J: Integer;
      Str: string;
    begin
      Strings.Clear;
      ZeroMemory(@NCB, SizeOf(NCB));
      NCB.ncb_command := Chr(NCBENUM);
      NCB.ncb_buffer := @LanaEnum;
      NCB.ncb_length := SizeOf(LanaEnum);
      NCB.ncb_command := Chr(NCBENUM);
      NetBios(@NCB);
      for I := 0 to Ord(LanaEnum.length) - 1 do
      begin
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command := Chr(NCBRESET);
        NCB.ncb_lana_num := LanaEnum.lana[I];
        NetBios(@NCB);
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command := Chr(NCBASTAT);
        NCB.ncb_lana_num := LanaEnum.lana[I];
        StrPCopy(NCB.ncb_callname, '*');
        NCB.ncb_buffer := @Adapter;
        NCB.ncb_length := SizeOf(Adapter);
        NetBios(@NCB);
        Str := '';
        for J := 0 to 5 do
        begin
    //                        if J > 0 then
    //                                Str := Str;// + '-';
          Str := Str + HexBL(Byte(Adapter.adapter_address[J]));
        end;
        Strings.Add(Str);
      end;
    end;
      

  4.   

    首先谢谢楼上各位的回答,但是还没解决问题,我关键是不知道怎么将某一个ip对应的主机的网卡mac取出来,取本地的我知道。请大家针对我的懵懂之处回答好么,谢谢!
      

  5.   

    那样的话楼主欠的就是IP解析了,请看下面的函数:
    ◇[DELPHI]实现IP到域名的转换
    function GetDomainName(Ip:string):string;
    var 
    pH:PHostent;
    data:twsadata;
    ii:dword;
    begin
    WSAStartup($101, Data);
    ii:=inet_addr(pchar(ip));
    pH:=gethostbyaddr(@ii,sizeof(ii),PF_INET);
    if (ph<>nil) then
    result:=pH.h_name
    else 
    result:='';
    WSACleanup;
    end;