如何用DELPHI通过IP地址或计算机名取网络的MAC地址啊

解决方案 »

  1.   

    http://www.ccrun.com/article/go.asp?i=500&d=x13v5jCb的代码,恐怕你要修改一下...
      

  2.   

    得到本机MAC地址    Delphi中有一nb30.pas单元,其中包含了对NetBIOS 3.0协议的完全支持。其中定义了API函数NetBIOS,通过这函数,就可以获得对应IP的MAC地址。    首先要在uses单元中包含nb30单元,然后将下面的函数加入到你的程序中。在相应的事件中进行调用。其中参数index指定取哪个网卡的MAC地址,第一个为0,依此类推。function TForm1.GetMacAddress(index:integer):string;
    var
       ncb : TNCB;                   //NetBios控制块
       AdapterS : TAdapterStatus;    //网卡状态结构
       LanaNum : TLanaeNum;          //Netbios Lana
       i : integer;
       rc : Char;                    //NetBios的返回代码
       str : String;
    begin
       Result := '';
       try
          ZeroMemory(@ncb, SizeOf(ncb));      //NetBios控制块清零
          ncb.ncb_command := chr(NCBENUM);    //ENUM
          rc := NetBios(@ncb);                //取返回代码      ncb.ncb_buffer := @LanaNum;         //再一次处理ENUM命令
          ncb.ncb_length := Sizeof(LanaNum);  
          rc := NetBios(@ncb);                //取返回代码      if ord(rc)<>0 then
             exit;      ZeroMemory(@ncb, Sizeof(ncb));      //NetBios控制块清零
          ncb.ncb_command := chr(NCBRESET);
          ncb.ncb_lana_num := LanaNum.lana[index];
          rc := NetBios(@ncb);
          if ord(rc)<>0 then
             exit;
          //取网卡的状态
          ZeroMemory(@ncb, Sizeof(ncb));
          ncb.ncb_command := chr(NCBASTAT);
          ncb.ncb_lana_num := LanaNum.lana[index];
          StrPCopy(ncb.ncb_callname,'*');
          ncb.ncb_buffer := @AdapterS;
          ncb.ncb_length := SizeOf(AdapterS);
          rc := NetBios(@ncb);
          //将MAC地址转换成字符串
          str := '';
          for i:=0 to 5 do
             str := str + IntToHex(Integer(AdapterS.adapter_address[i]),2);      Result := str;
       finally
       end;
    end;以上程序我昨天晚上调试通过了!
      

  3.   

    xx_adam
    我的想法是,通过计算机的ip地址取网卡的mac值。
    不是本机的MAC地址。