在线等该!!怎么用delphi修改本机的mac地址啊?? ( 积分: 100 )

  • 主题发起人 主题发起人 lmeagle01
  • 开始时间 开始时间
在Win9x和winnt 3.5、4.0下,网卡驱动程序使用NDIS规范与操作系统通信。MAC地址被存储在操作系统的某存储单元内,这时可以通过修改该内容达到目的而不用修改你的 EPROM内容。
1、首先打开注册表,找到 HKEY_LOCAL_
MACHINE/system/Currentcontrolset/services classes/net/0000、0001、0002等下,观察DriverDesc内容为你要修改的网卡的描述。
2、在其下,添一个字符串,名字为NetworkAddress,值设为你要的MAC地址,要连续写。 如004040404040。
3、然后到其下 NDI/params中加一项NetworkAddress的主键,在该主键下添加名为 default的字符串,其值写你要设的mac地址,要连续的写,如004040404040。
4、然后到其下 NDI/params中加一项NetworkAddress的主键,在该主键下添加名为 ParamDesc的字符串,其作用为指定 Network- Address主键的描述,其值可为“MAC Address”,这样以后打开网络邻居的属性,双击相应网卡项会发现有一个高级设置,其下存在MAC Address 的选项,就是你在注册表中加的新项NetworkAddress,以后只要在此修改MAC地址就可以了。
5、关闭注册表,重新启动,你的网卡地址已改。打开网络邻居的属性,双击相应网卡项会发现有一个MAC Address的高级设置项。用于直接修改MAC地址。 一些网卡如d-link的de220在安装时,会自动在注册表中加入这些项目,你只需修改值就可以了。
1、2步骤用于修改当前(下一次启动)时MAC 地址。 3、4步骤用于在网络属性的网卡属性中添加相应高级属性。

WinNT下改网卡地址的方法:打开注册表, HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet-> Services 假设我的网卡是ne2000,找到NE2000与NE20001的键值(不知道怎么回事,我这里关于NE 2000的键有两个,为保险,都做如下修改),在Parameters项里添加字串值:名称:NetworkAddress 数据:“004040404040” (这里就是你要改的mac值,可自己随便填12位) 然后重新启动计算机,ipconfig看一下,就知道改好了没。

Win2k下改网卡地址的方法:一般来说,如果不是选择NE2000 COMPATIBLE安装的驱动,在网卡的属性里面会有一个高级页,其中会有NETWORK ADDRESS的选项,这样你就可以设置啦。这个方法在WIN98中也适用。我的WIN2K网卡就是这样装好的,而且有意思的是,我的网卡没有2K的驱动,只有尝试选择其他的 NE2000兼容网卡安装驱动,在2K的硬件安装向导里,如果配置成功,最后一定不会出现驱动不匹配的信息,不用重启来检验了,真的不错。另外,如果你想改注册表的话,就这样,在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet /Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}下,(这个项对应的是网卡配置)找到你的ETHERNET网卡项000x,然后添加或修改一个名为 Network Address的字符串值,填入你需要修改的MAC地址就可以了
 
通过你说的那个子键下面的NetCfgInstanceId判断

通过这个东西可以到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters/Interfaces
去找他的ip就知道该改那个了 .
 
首先要获得网卡的型号吧.再修改相关的参数值吧!
 
to satanmonkey,hgdong
你们说得和我的想法类似,但是修改的地方应该是有关于网卡信息描述的那个子键下,这样才能改mac,否则修改了也没用,但是这需要:
第一、找到网卡名称信息,如果我的是:Macronix MX98715-Based Ethernet Adapter (Generic)
第二、搜索LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}子键下面的子键,就是0000,0001,0002..等,如果有网卡名称信息,比如0000包含,则0000就是要进行改的地方,把这个路径返回去
第三、这就简单了,修改注册表,添值就行了
to all
谁能帮我啊
 
1、在iphlpapi.dll中可以通过GetAdaptersInfo取得Mac地址,应该有相应的方法修改Mac地
址吧
2、请参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=388180
 
IP Helper API不能改这些东西,只读的.
 
去搞一个改 EPROM的东东好啦!!软件实现就是上面说的
 
网卡EPROM内的是固化在里面的吧.应该不能通过软件随便改,要改也要专门设备
就算能改,那么多网卡.接口肯定不统一.
 
to xianguo
不行啊,哪个不是啊
to satanmonkey,Netsoft
哎,我在功能上已经实现了,现在只是想不通国手工来实现,改程序来实现,所以能改是不用讨论了
to all
其实就是改注册表的事,只不过多了一个定位,谁能帮我
第一、找到网卡名称信息,假如我的是:Macronix MX98715-Based Ethernet Adapter (Generic)
第二、那么搜索LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}子键下面的子键,就是0000,0001,0002..等,如果有网卡名称信息(既包含Macronix MX98715-Based Ethernet Adapter (Generic)),比如0000包含,则0000就是要进行改的地方,把这个路径返回去
第三、这就简单了,修改注册表,添值就行了
 
我在网上下载了一个修改MAC地址的软件,它是通过API的方式实现的(而不是修改注册表)
www.hitekersoft.com/download/mac.exe
 
to xianguo
多谢一直关注,一定给分,不过我是想用delphi自己编程实现,而且你提供的那个软件我用了,不好用,改不了mac地址,倒是能把网卡名称信息提取出来
to all
哎,这个问题这么难吗...................
 
1、取网卡MAC地址
2、遍历注册表LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}找到MAC地址与1相等的
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}', False);
Reg.GetKeyNames(ComboBox1.Items);
for i :=0 To ComboBox1.Items.Count-1 Do
begin
Reg.CloseKey;

Reg.OpenKey('SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/' + ComboBox1.Items, False);
Reg.GetValueNames(ComboBox2.Items);
for j :=0 To ComboBox2.Items.Count-1 Do
begin
if (ComboBox2.Items[j] = 'DriverDateData') Then
Reg.ReadBinaryData('DriverDateData', Buf, 8);
if buf = 1中的MAC地址 then break; 同时返回此时注册表的key
end;
end;
Reg.Free;
3、修改
 
to xianguo
多谢,感觉差不多了,我回去弄弄,通过立刻加分:)
 
LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}

找到相应的网卡,取出NetCfgInstanceId子键的值

然后到
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters/Interfaces
下面相应当子键去改,他们的联系就算NetCfgInstanceId 干好色HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters/Interfaces
下的子键名。
 
to xianguo leiming000001
按着leiming000001的启发,和xianguo 给的那段代码,功能已经基本实现了,非常感谢!
一点小分不成敬意!
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部