注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

免驱蓝牙适配器物理地址(MAC地址)重复的问题  

2011-03-14 23:58:19|  分类: 安全/\病毒、木马 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        前两天,在网上看到一些人的讨论,有人说自己的两个蓝牙适配器MAC地址一样,还有一个人的蓝牙MAC地址居然是“22:22:22:22:22:22”,不知道这个蓝牙的设计者设计这样一个MAC地址是否另有深意。看到这些之后,我暗自庆幸自己的蓝牙适配器物理地址不是一样的!
        今天又去买了一个蓝牙,倒霉的事情也就发生了。回来后,接上蓝牙,启动自己的软件,然后就是等待和等待。几分钟之后,感觉不对劲。我感觉这个新的蓝牙适配器的MAC地址很眼熟,似曾相识。于是和另外一个蓝牙适配器的地址比较了一下,似乎是一样的!我怀疑自己看错了,就再看了几遍,最后是一种悲凉之感涌上心头。天下竟然有这么巧的事情,一个是很久以前买的,一个是今天买的,两个的物理地址居然是一样的,而且还不是“00: 00: 00: 00: 00: 00”这类的MAC,它是很“科学”的MAC:“00:1b:10:00:0d:aa”。
        
        修改MAC。前几天,安装过第三方蓝牙驱动,是可以修改蓝牙适配器的MAC地址的。我想,Windows自带的驱动获取也有类似的接口。百度,没有结果,都是讲修改手机的蓝牙MAC地址。MSDN,BluetoothUpdateDeviceRecord
        单从函数名字看来,这个函数的功能很强大。于是,简单地写了如下的代码测试:

int GenerateMac()
{
BLUETOOTH_FIND_RADIO_PARAMS btfrp = { sizeof(btfrp) };   
BLUETOOTH_DEVICE_SEARCH_PARAMS  btdp = { sizeof(btdp) };   
BLUETOOTH_DEVICE_INFO Devinfo={0};   
BLUETOOTH_RADIO_INFO RadioInfo={0};   
HANDLE hRadio;   
char blueT_Name[256]={'\0'};   
HBLUETOOTH_RADIO_FIND hFind_R ;   
DWORD ret=0;

hFind_R = BluetoothFindFirstRadio(&btfrp,&hRadio);   
if (NULL != hFind_R)   
{   
RadioInfo.dwSize = sizeof(RadioInfo);
if( ERROR_SUCCESS == BluetoothGetRadioInfo(hRadio, &RadioInfo))   
{   
CloseHandle(hRadio);
}   
else  
{   
CloseHandle(hRadio);
BluetoothFindRadioClose(hFind_R); // Close Local Function   
return 0;   
}   

Devinfo.dwSize = sizeof(Devinfo);   

Devinfo.Address.ullLong=RadioInfo.address.ullLong;
// Devinfo.Address.rgBytes[0]=0x11;
// Devinfo.Address.rgBytes[1]=0x11;
// Devinfo.Address.rgBytes[2]=0x11;
// Devinfo.Address.rgBytes[3]=0x11;
// Devinfo.Address.rgBytes[4]=0x11;
// Devinfo.Address.rgBytes[5]=0x11;
//_tcscpy_s(Devinfo.szName, sizeof(Devinfo.szName)/sizeof(TCHAR), RadioInfo.szName);
_tcscpy_s(Devinfo.szName, sizeof(Devinfo.szName)/sizeof(TCHAR), _T("a"));
Devinfo.ulClassofDevice=RadioInfo.ulClassofDevice;
ret=BluetoothUpdateDeviceRecord(&Devinfo);

BluetoothFindRadioClose(hFind_R); // Close Local Function   
}   
else  
{   
return -1;   
}   
return 0;
}

        这个函数的调用是成功的,但是就是没有效果。仔细查阅MSDN:
The BluetoothUpdateDeviceRecord function updates the local computer cache about a Bluetooth device.

Remarks

When updating a Bluetooth device record, the requirements for members of the BLUETOOTH_DEVICE_INFO structure, listed in the following table, must be observed.

MemberRequirement
dwSizeMust match the structure size.
AddressMust be a previously found radio address.
szNameMust contain the new name to be stored.


       微软对于这个函数的注释很含蓄。“Must be a previously found radio address.”地址必须是之前的地址,言外之意,这个地址是没法改变的。——MAC地址没法改变。
       自己没看清楚,原来这个函数只有一个参数!没有MAC地址,又怎么能知道要修改哪个蓝牙适配器呢?
      “Must contain the new name to be stored.”原来这个函数只是改名称的!
       既然测试代码都已经写了,这个函数还是要调用成功的吧,要不然岂不是白忙活了。所以,才有了上面的代码:修改蓝牙适配器的名称。但是,也没有效果!——20110315补充:其实是有效果的,只不过需要等待一会儿,不会立刻看到效果!

       之前,修改注册表的方法也试过了,不行!

       那么,蓝牙的物理地址到底能不能改?从理论上说,是可以修改的。蓝牙适配器反射什么样的MAC地址信号,完全由驱动程序决定,如果驱动程序支持修改MAC,那就可以。比如手机的蓝牙MAC地址就可以修改。
       但是,windows xp自带驱动是不支持的!而如果一个区域内,存在两个相同MAC的蓝牙,那就会出错,连基本的搜索蓝牙设备都可能出错。


20110315补充:
这个问题pass,不管了。

By:zhanyonhu

  评论这张
 
阅读(4486)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016