怎么写代码修改MAC地址

时间:2021-07-17 13:37:16
网上找了很多的资料还没有是能帮我解决。请大家帮帮忙

9 个解决方案

#1


在Windows中,网卡的MAC保存在注册表中,实际使用也是从注册表中提取的,所以只要修改注册表就可以改变MAC。Windows   9x中修改:打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\   
  Service\Class\Net\下的0000,0001,0002。   
    
    Windows   2000/XP中的修改:同样打开注册表编辑器,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\   
  Class\4D36E970-E325-11CE-BFC1-08002BE10318   中的0000,0001,0002中的DriverDesc,如果在0000找到,就在0000下面添加字符串变量,命名为“NetworkAddress”,值为要设置的MAC地址,例如:000102030405   
    
    完成上述操作后重启就好了。一般网卡发出的包的源MAC地址并不是网卡本身写上去的,而是应用程序提供的,只是在通常的实现中,应用程序先从网卡上得到MAC地址,每次发送的时候都用这个MAC作为源MAC而已,而注册表中的MAC地址是在Windows安装的时候从网卡中读入的,只要你的操作系统不重新安装应该问题不大。   
  

所以你只需要让delphi操作注册表就可以, 另修改mac后可能造成局域网不能访问,共享文件,共享打印之类问题. 谨慎操作.

#2


求其它的方法

#3


我试了下,zhangqiwen(一直在等)的方法是可行的呀!!!

#4


方法没问题啊,
delphi操作注册表不会马?
http://delphi.e-0631.cn
这个代码包里有,下载参考把。

#5


delphi寫HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\   
  Class\4D36E970-E325-11CE-BFC1-08002BE10318

#6


谢谢大家

#7


zhangqiwen(一直在等) ( 
我找不到:0000,0001,0002中的DriverDesc,MAC地址是唯一的,怎么能修改呢?!

#8


Dll下载http://www.playicq.cn/dispdocnew.php?id=35175

说明:

set_mac.dll调用函数的说明:

function netcard_Description(i:integer): pchar; // 返回对第i块网卡的描述:
function netcardt_count():integer; // 返回物理网卡的总个数:
function netcardf_count():integer; // 返回逻辑网卡的总个数:
function read_mac(i:integer;ft:boolean): pchar; // 返回第i块网卡的 当前mac (ft=false) 或真实mac (ft=true);
function read_mact(i:integer):pchar; // 返回第i块网卡的真实mac;
function read_macf(i:integer):pchar; // 返回第i块网卡的当前mac;
function write_mac(i:integer;macstr:pchar):integer; // 将第i块网卡的MAC改为给定的MAC_STR值;返回1成功,0失败
function set_real_mac(i:integer):integer; // 恢复第i块网卡的MAC为其真实值;返回1成功,0失败
function reg_inf(REdit: pchar):integer; // 将设置你的注册信息


1、delphi中对dll的调用:

var
Form1: TForm1;
const
dllfile='set_mac.dll';

function netcard_Description(i:integer): pchar; stdcall;external dllfile name 'netcard_Description';
function netcardt_count():integer; stdcall;external dllfile name 'netcardt_count';
function netcardf_count():integer; stdcall;external dllfile name 'netcardf_count';
function read_mac(i:integer;ft:boolean): pchar; stdcall;external dllfile name 'read_mac';
function read_mact(i:integer):pchar; stdcall;external dllfile name 'read_mact';
function read_macf(i:integer):pchar; stdcall;external dllfile name 'read_macf';
function write_mac(i:integer;macstr:pchar):integer; stdcall;external dllfile name 'write_mac';
function set_real_mac(i:integer):integer; stdcall;external dllfile name 'set_real_mac';
function reg_inf(REdit: pchar):integer; stdcall;external dllfile name 'reg_inf';

implementation

\{ *.dfm}

#9


4D36E970-E325-11CE-BFC1-08002BE10318   不一定是这个
我的是{4D36E972-E325-11CE-BFC1-08002bE10318}
而且0000,0001,0002这个根据网卡不同和网卡块数号也会变的,所以还要先辨别是哪个,

#1


在Windows中,网卡的MAC保存在注册表中,实际使用也是从注册表中提取的,所以只要修改注册表就可以改变MAC。Windows   9x中修改:打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\   
  Service\Class\Net\下的0000,0001,0002。   
    
    Windows   2000/XP中的修改:同样打开注册表编辑器,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\   
  Class\4D36E970-E325-11CE-BFC1-08002BE10318   中的0000,0001,0002中的DriverDesc,如果在0000找到,就在0000下面添加字符串变量,命名为“NetworkAddress”,值为要设置的MAC地址,例如:000102030405   
    
    完成上述操作后重启就好了。一般网卡发出的包的源MAC地址并不是网卡本身写上去的,而是应用程序提供的,只是在通常的实现中,应用程序先从网卡上得到MAC地址,每次发送的时候都用这个MAC作为源MAC而已,而注册表中的MAC地址是在Windows安装的时候从网卡中读入的,只要你的操作系统不重新安装应该问题不大。   
  

所以你只需要让delphi操作注册表就可以, 另修改mac后可能造成局域网不能访问,共享文件,共享打印之类问题. 谨慎操作.

#2


求其它的方法

#3


我试了下,zhangqiwen(一直在等)的方法是可行的呀!!!

#4


方法没问题啊,
delphi操作注册表不会马?
http://delphi.e-0631.cn
这个代码包里有,下载参考把。

#5


delphi寫HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\   
  Class\4D36E970-E325-11CE-BFC1-08002BE10318

#6


谢谢大家

#7


zhangqiwen(一直在等) ( 
我找不到:0000,0001,0002中的DriverDesc,MAC地址是唯一的,怎么能修改呢?!

#8


Dll下载http://www.playicq.cn/dispdocnew.php?id=35175

说明:

set_mac.dll调用函数的说明:

function netcard_Description(i:integer): pchar; // 返回对第i块网卡的描述:
function netcardt_count():integer; // 返回物理网卡的总个数:
function netcardf_count():integer; // 返回逻辑网卡的总个数:
function read_mac(i:integer;ft:boolean): pchar; // 返回第i块网卡的 当前mac (ft=false) 或真实mac (ft=true);
function read_mact(i:integer):pchar; // 返回第i块网卡的真实mac;
function read_macf(i:integer):pchar; // 返回第i块网卡的当前mac;
function write_mac(i:integer;macstr:pchar):integer; // 将第i块网卡的MAC改为给定的MAC_STR值;返回1成功,0失败
function set_real_mac(i:integer):integer; // 恢复第i块网卡的MAC为其真实值;返回1成功,0失败
function reg_inf(REdit: pchar):integer; // 将设置你的注册信息


1、delphi中对dll的调用:

var
Form1: TForm1;
const
dllfile='set_mac.dll';

function netcard_Description(i:integer): pchar; stdcall;external dllfile name 'netcard_Description';
function netcardt_count():integer; stdcall;external dllfile name 'netcardt_count';
function netcardf_count():integer; stdcall;external dllfile name 'netcardf_count';
function read_mac(i:integer;ft:boolean): pchar; stdcall;external dllfile name 'read_mac';
function read_mact(i:integer):pchar; stdcall;external dllfile name 'read_mact';
function read_macf(i:integer):pchar; stdcall;external dllfile name 'read_macf';
function write_mac(i:integer;macstr:pchar):integer; stdcall;external dllfile name 'write_mac';
function set_real_mac(i:integer):integer; stdcall;external dllfile name 'set_real_mac';
function reg_inf(REdit: pchar):integer; stdcall;external dllfile name 'reg_inf';

implementation

\{ *.dfm}

#9


4D36E970-E325-11CE-BFC1-08002BE10318   不一定是这个
我的是{4D36E972-E325-11CE-BFC1-08002bE10318}
而且0000,0001,0002这个根据网卡不同和网卡块数号也会变的,所以还要先辨别是哪个,