怎样用代码实现修改MAC地址?

安馨安旭 2006-09-28 07:03:43
公司近来老限制上网,为了不受限制,我们经常要该MAC地址。但是手动改起来要好几个步骤,而且要教那些不懂网络的人去改很麻烦,我想做一个软件点一下就直接能改。免的以后一个一个的去教……
我说的改MAC不是改真的MAC地址,而是在注册表中设置一个假的MAC地址,让服务器以为你的MAC地址是那么多,但是实际地址还是没变的,只是用来欺骗服务器上网的。
我以前见过别人用DOS代码实现修改的,不过现在找不到了。不知道有没有高手帮忙解决一下。
...全文
874 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
安馨安旭 2006-11-28
  • 打赏
  • 举报
回复
问题已经解决,谢谢大家,上面两种方法都是正确的,只不过注册表的地址有问题。应该修改为:
SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}\\0012
leeky 2006-10-09
  • 打赏
  • 举报
回复
如果问题变成了如何修改注册表,那么你自己做就是了,
不必麻烦别人了哦,不懂就去看帮助嘛。
安馨安旭 2006-10-08
  • 打赏
  • 举报
回复
to:
missvip()
我按照你的代码试了下,编译器提示说MAC.h不可识别,如果我把MAC.h屏蔽掉运行就没有错误,但是仍然修改不了MAC地址。重起电脑也是如此!这是什么原因呢?
安馨安旭 2006-10-08
  • 打赏
  • 举报
回复
刚回家过了个国庆节,有好多天都没来论坛了,不知道大家节日过的怎么样?
missvip 2006-10-04
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "Registry.hpp"
#include "MAC.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegistry *Registry;
Registry=new TRegistry();
AnsiString str,text;
str=Edit1->Text;
try{
Registry->RootKey = HKEY_LOCAL_MACHINE;
if( Registry->OpenKey("System\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\0001",FALSE))
{
Registry->WriteString("NetWorkAddress",str);
Application->MessageBoxA("MAC修改成功!","SUCCESSFUL!",0) ;
Registry->CloseKey();
}
else
{
Registry->CreateKey("System\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\0001");
Registry->WriteString("NetWorkAddress",str);
Registry->CloseKey();
} //End of try
}
__finally
{
Registry->CloseKey();
delete Registry;
}
}
//---------------------------------------------------------------------------
如果你原来MAC是:00-DD-EF-AD-DF-AS
你想修改变:00-DD-EF-AD-DF-AD
只要在Edit中输入;00DDEFADDFAD
点修改就可以了
然后重起机器就成功了

sczyq 2006-10-04
  • 打赏
  • 举报
回复
FAQ 标题:

如何编程控制网络连接(自动禁用和启用)?
sczyq 2006-10-04
  • 打赏
  • 举报
回复
我曾经回复过一个禁用与启用网卡的问题,其实改MAC地址,只需将注册表里将网卡的值修改,再禁用该网卡,然后再启用他,即可达到你的要求。

那个帖子已经找不到ID了,旧版本是在FAQ里。
flowercity 2006-10-03
  • 打赏
  • 举报
回复
mark
柯本 2006-10-01
  • 打赏
  • 举报
回复
另外,执行该程序必须为系统管理员(如果你的XP有多个用户的话)
还有,你可用regedit手工检查或修改注册表项试试
柯本 2006-10-01
  • 打赏
  • 举报
回复
没有任何提示就表示成功修改了注册表,重新启动机器或将网卡禁用/启用一次,然后在cmd在执行
ipconfig看一下它的Physical Address,如果完全按我的程序,它应该为00-22-11-33-44-55
就表示成功了,在程序中将两个:002211334455改成你要的MAC就可以了(中间不能有-号)
安馨安旭 2006-10-01
  • 打赏
  • 举报
回复
我的是XP的系统,sp2的系统,把你的代码添加进去运行后,没一点效果,也没报错,不知道怎么回事.....麻烦你帮看看,顺便祝节日愉快!!
Santos 2006-09-30
  • 打赏
  • 举报
回复
给你个思路.

1、取得当前网卡名称
2、访问注册表,取得该名称所在的节点。对应的Key要是DriverDesc。
3、将该节点下的NetworkAddress的值设为[要改的MAC地址]。(大约有3处,所以要穷举节点)
4、重新启动计算机即可。
安馨安旭 2006-09-30
  • 打赏
  • 举报
回复
好象没有效果哦……
柯本 2006-09-30
  • 打赏
  • 举报
回复
我在win2k及xp下试过,可以的,用ipconfig ,网卡mac 为:

Physical Address. . . . . . . . . : 00-22-11-33-44-55
安馨安旭 2006-09-29
  • 打赏
  • 举报
回复
没其他的人会吗?自己顶一下,最好能给出代码来!因为BCB操作注册表和DOS我不怎么会……
安馨安旭 2006-09-29
  • 打赏
  • 举报
回复
谢谢了,晚上试下,先过生日,呵呵
柯本 2006-09-29
  • 打赏
  • 举报
回复
给你写了个简单的,可以实现:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegistry *r=new TRegistry();
String rs="SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}";
r->RootKey=HKEY_LOCAL_MACHINE;
if (!r->OpenKey(rs,false))
{
ShowMessage("error");
return;
}
TStringList *ts=new TStringList();

r->GetKeyNames(ts);
r->CloseKey();
int m=-1;
for (int i=0;i<ts->Count;i++)
{
if (r->OpenKey(rs+"\\"+ts->Strings[i]+"\\Ndi\\params",false))
{
m=i;
break;
}
}
if (m==-1)
{
ShowMessage("error1");
return;
}
r->CloseKey();
if (!r->OpenKey(rs+"\\"+ts->Strings[m]+"\\Ndi\\params\\NetworkAddress",true))
{
ShowMessage("Error2");
return;
}
r->WriteString("default","002211334455"); //MAC
r->CloseKey();
r->OpenKey(rs+"\\"+ts->Strings[m],false);
r->WriteString("NetworkAddress","002211334455"); //MAC
r->CloseKey();
}
//执行程序后,禁用/启用一次网卡就可以了(重启机器也可以)
//禁用/启用网卡也可以用程序实现,以前做过,要找一下了
Andrionda 2006-09-29
  • 打赏
  • 举报
回复
不能帮楼主出点主义,只能帮你顶了
zzd8310 2006-09-28
  • 打赏
  • 举报
回复
帮顶
柯本 2006-09-28
  • 打赏
  • 举报
回复
首先,给你个参考:
http://www.pc120.net.cn/library/net/modem/modem054.htm
然后,用BCB的TRegistry类,对注册表进行查找/修改,这个应该没难度.只是要化上点时间.

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧