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后可能造成局域网不能访问,共享文件,共享打印之类问题. 谨慎操作.
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
这个代码包里有,下载参考把。
delphi操作注册表不会马?
http://delphi.e-0631.cn
这个代码包里有,下载参考把。
#5
delphi寫HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\
Class\4D36E970-E325-11CE-BFC1-08002BE10318
Class\4D36E970-E325-11CE-BFC1-08002BE10318
#6
谢谢大家
#7
zhangqiwen(一直在等) (
我找不到:0000,0001,0002中的DriverDesc,MAC地址是唯一的,怎么能修改呢?!
我找不到: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}
说明:
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这个根据网卡不同和网卡块数号也会变的,所以还要先辨别是哪个,
我的是{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后可能造成局域网不能访问,共享文件,共享打印之类问题. 谨慎操作.
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
这个代码包里有,下载参考把。
delphi操作注册表不会马?
http://delphi.e-0631.cn
这个代码包里有,下载参考把。
#5
delphi寫HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\
Class\4D36E970-E325-11CE-BFC1-08002BE10318
Class\4D36E970-E325-11CE-BFC1-08002BE10318
#6
谢谢大家
#7
zhangqiwen(一直在等) (
我找不到:0000,0001,0002中的DriverDesc,MAC地址是唯一的,怎么能修改呢?!
我找不到: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}
说明:
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这个根据网卡不同和网卡块数号也会变的,所以还要先辨别是哪个,
我的是{4D36E972-E325-11CE-BFC1-08002bE10318}
而且0000,0001,0002这个根据网卡不同和网卡块数号也会变的,所以还要先辨别是哪个,