怎样获得网卡Mac地址? 且全球的网卡Mac地址是否唯一? 请些出必要的代码,谢谢.

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2392/2392722.xml?temp=.2083551
      

  2.   

    Mac地址是Ethernet(以太网)网卡上带的的地址。 Ethernet网卡厂家向IEEE组织申请到MAC地址之后,生产网卡时在网卡的串行EEPROM(可擦除只读存储器)中写入惟一的MAC地址。要取得MAC地址,可使用Delphi的NB30.pas单元,利用对NetBIOS协议的支持就可以获得对应于IP的MAC地址。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,nb30;type
      TForm1 = class(TForm)
        Label1: TLabel;
        Edit1: TEdit;
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
         Function NBGetAdapterAddress(a:integer):String;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function TForm1.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);//执行enum命令
        cR := NetBios(@NC);    NC.ncb_buffer := @LANAENU;  //继续出来enum命令
        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);    //将MAC地址转成字符串输出
        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;end.
      

  3.   

    理论上MAC地址是唯一的,但实际上修改网卡的MAC很简单,MAC地址存在网卡的E2PROM中,几乎所有的编程器都可以读出来进行修改