首页
社区
课程
招聘
[旧帖] 现在无线网卡驱动是通过什么方式获取本机mac地址并显示的? 0.00雪花
发表于: 2013-7-9 12:47 7846

[旧帖] 现在无线网卡驱动是通过什么方式获取本机mac地址并显示的? 0.00雪花

2013-7-9 12:47
7846
如题,现在大部分无线网卡(比如英特尔)的官方驱动都限制了mac地址的随意修改,导致传统修改注册表的方法只有mac第二位为2,6,a,e时才能修改成功,否则显示都是网卡原始mac。但根据mac地址的规则,第二位为2,6,a,e的网卡是不存在的(或者说是只能修改才能得到的)。

我想自己动手实现任意修改无线网卡的mac,但必须解决下面这个问题,我的问题是驱动级的网卡是如何获取网卡的mac?又通过什么样的手段来将之“作为”或“显示为”本机网卡的mac呢?

求大神予以指教,哪怕是告诉我通过调试得到上述问题答案的思路也行

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
同求,求科普
2013-7-9 18:35
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
在设备管理器-网络适配器-查看本机所有网卡名称
运行regedit打开注册表
定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\,并查看此下所有主键,一般都有十个左右的主键,由于我个人笔记本用的外接网卡比较多,所以多点主键。
从0000起,鼠标选中,查看右侧,查看名称为DriverDesc的项目数据,看看是不是刚刚在设备管理器中看到的网卡名称。看我的,我在0007中找到了自己的网卡broadcom,0007主键中还有一项networkaddress,其值是我的mac,这是我的固定网卡,此处可以修改固定网卡mac。
对比下0007/Ndi/params/主键下的内容,发现了吧,嘿嘿,完全对应windows的高级选项卡中的所有选项,这样相信大家已经有了大概想法了。
再按刚才的方法找无线网卡的主键,这是一块没处理过的网卡RTL8187,发现Ndi/params/下没有networkaddress主键,0009主键下也没有名称为networkaddress的项目名称,于是,我们想到了手动添加这些信息。
拿我的主无线网卡为例(因为已经改过了)4954AGN,在0011主键右侧添加名称为NetworkAddress的字符串,值设定为目标值。
左侧的0011/Ndi/params下新建主键名称为NetworkAddress。
选中左侧的0011/Ndi/params/NetworkAddress,右侧设置完全复制那个固定网卡的内容,注意一点是,Default的数据要为刚才设定的NetworkAddress所设定的MAC
解决问题,值得一提的是,这个需要重启机器。运行CMD,输入ipconfig/all看看修改成功没有~~这种方法一劳永逸,以后直接就能在属性中修改mac了。
再次强调,请先阅读全文,保证每步都看懂了,备份注册表后,再进行尝试,注册表修改要慎重,尤其是本次涉及windows的网络模块,很可能做错了导致启动异常,所以保证看懂了,会用了,再去尝试。
2013-7-11 16:52
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
#Include <File.au3>
#RequireAdmin

$PC = @ComputerName & ".tmp"

if fileexists($pc) then
filedelete($pc)
EndIf

Run(@ComSpec & " /c " & 'getmac >> ' & $PC, "", @SW_HIDE)
$i = _FileCountLines($PC)
$line = 0

Do
$info = filereadline($PC, $line)
if $info = "" or StringInStr($info, "物理地址", 0) or StringInStr($info, "===================", 0) or StringInStr($info, "传输名称", 0) then
sleep(1000)
$line = $line +1
else
$mac = stringleft(FileReadLine($pc, $line), 17)
$line = $i
filedelete($pc)
EndIf
until $line = $i

msgbox(64, "MAC Address", "your mac address is: " & $mac)

PS:  利用 ‘getmac’命令获取 本机MAC地址 (AU3)
2013-7-11 17:22
0
雪    币: 61
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢你的关注。

不过你完全没有看懂我的问题,你说的这个根本无法实现随意修改现在的无线网卡mac。原因是无线网卡驱动端已经限制了mac的修改。我想知道的是如何解除这个驱动端的限制,或者说无线网卡驱动是如何进行这个限制的
2013-7-12 17:59
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
pLopp

i
l
2013-7-12 18:06
0
雪    币: 61
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
都没人回答,我自己回答吧。
网卡是通过ndis.sys中的NdisReadNetworkAddress获取mac地址的,然后通过检查参数,若mac地址合法即将其作为网卡地址,否则读取自身地址。。而现在网卡驱动判断 mac合法化时要确认第二位为2,6,a,e才行
2014-3-5 12:45
1
游客
登录 | 注册 方可回帖
返回
//