用SendArp可以得到MAC,但是他的条件是你的网卡连在局域网上。那么我想在孤立的装有网卡的机器上得到MAC怎么办呢?

解决方案 »

  1.   

    总得来说获取网卡MAC有三种方法.
    1.使用GUID.  2.用一个老协议NetBios来获得MAC地址  3.使用RPC方式获得MAC地址.一.GUID是所有支持COM计数的WINDOWS系统中定义的一个数据结构.在GUID的生成过程中就参考了MAC地址并借肋MAC地址的全局唯一性来确定GUID的全局惟一性我们可利用这个特性获取本机mac 地址.在本机网卡mac 地址生成的guid中最后六个字节就是网卡的mac地址.
    二........
    三........如需实例来件:  [email protected]
      

  2.   

    To: dickeybird888(于伟刚)
    NBGetAdapterAddress里的a参数怎么传递啊?还有我想通过机器名称来得到网络上的任意一台机器的MAC,那改怎么办呢?
      

  3.   

    在csdn搜索一下(或是www.playicq.com),有例子
      

  4.   

    那,我现在想通过IP地址来得到任意一个LAN内的MAC(包括没有联机的本机网卡),假如谁有这样的现成的函数,我另外加开一个200分的放分帖!
      

  5.   

    function LanCardID: string;
    //获取网卡物理地址
    var guid: TGUID;
        i: integer;
    begin
       result := '';
       CoCreateGUID(guid);
       for i := Low(guid.D4)+2 to High(guid.D4) do
       begin
          result := result + IntToHex(guid.D4[i],2);
       end;
    end;
      

  6.   

    unit MacAdress;interface
    uses SysUtils,NB30, Classes, Controls, StdCtrls,windows;function  Getmac:string;implementationtype
    PASTAT = ^TASTAT;
      TASTAT = record
        adapter : TAdapterStatus;
        name_buf : TNameBuffer;
    end;function  Getmac:string;
    var
      ncb : TNCB;
      s:string;
      adapt : TASTAT;
      lanaEnum : TLanaEnum;
      i, j, m : integer;
      strPart, strMac : string;
    begin
      result:='';
      FillChar(ncb, SizeOf(TNCB), 0);
      ncb.ncb_command := Char(NCBEnum);
      ncb.ncb_buffer := PChar(@lanaEnum);
      ncb.ncb_length := SizeOf(TLanaEnum);
      s:=Netbios(@ncb);
      m:=1;
      if (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) then
      m:=0;
      for i := 0 to integer(lanaEnum.length)-1 do
      begin
        FillChar(ncb, SizeOf(TNCB), 0);
        ncb.ncb_command := Char(NCBReset);
        ncb.ncb_lana_num := lanaEnum.lana[i];
        Netbios(@ncb);
        Netbios(@ncb);
        FillChar(ncb, SizeOf(TNCB), 0);
        ncb.ncb_command := Chr(NCBAstat);
        ncb.ncb_lana_num := lanaEnum.lana[i];
        ncb.ncb_callname := '*               ';
        ncb.ncb_buffer := PChar(@adapt);
        ncb.ncb_length := SizeOf(TASTAT);   if m=1 then
        begin
          if Netbios(@ncb) = Chr(0) then
          strMac := '';      
          for j := 0 to 5 do
          begin
            strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
            strMac := strMac + strPart ;
          end;
          SetLength(strMac, Length(strMac));
        end;
      if m=0 then
        if Netbios(@ncb) <> Chr(0) then
        begin
          strMac := '';
          for j := 0 to 5 do
          begin
            strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
            strMac := strMac + strPart ;
          end;
          SetLength(strMac, Length(strMac));
        end;
      end;
      result:=trim(strmac);
    end;