GetAdaptersInfo怎样区分无线网卡?

The_facE 2009-05-27 02:06:12
问题1:
GetAdaptersInfo函数运行后的到得IP_ADAPTER_INFO结构体中Type项能否区分无线网卡?

问题2:
如果不能,VC6中有什么好的函数来辨别无线网卡和普通网卡?

问题3:
这个问题比较糟糕,因为在下没用过无线网卡这东西。无线网卡的路由器密钥能够将网络连接限制到什么程度?是连网关都ping不通?

问题4:
如果现在无线网卡已经连通并且程序已经能够辨识,如何用程序来检验无线网卡是否取得无线路由的密钥?

PS:不用给代码,只需说明一下方法即可。
...全文
1398 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
The_facE 2009-06-01
  • 打赏
  • 举报
回复
哦,今天公司弄了个无线网卡来给我测,哈哈!

感谢大家的支持,基本上可以搞定了,就是最后一个问题解决的不是很直接。我厚颜无耻的来总结一下。

问题1.
Type项都是该死的6,真糟糕。

问题2.
直接用函数来辨别至今未发现,我采用了dream238的建议,从注册表查询键值。不过dream238兄记错了,wifi值出现在LowerRange中,而且是添加在其他值的后面,反而UpperRange是不变的,呵呵。但是不知道各种类型的网卡是否相同,这个问题就交给公司的测试部了,哈哈。

问题3.
公司没有给我无线路由的密钥,我的连接根本就是一个大红叉。不知道这项会不会有其他变化,我不管了。

问题4.
我采用了wangk兄的建议,查阅了一下Wlanapi.dll,通过这个库调用WlanEnumInterfaces等Wlan系列函数来检测状态,不过只要有信号能检测到并且有通讯就是connected,不太好用,结合ping网关的方式还好一点。

无论如何,感谢各位参与!
特别感谢:
wangk
dream238

PS: yearn520兄所说注册表读取不明智一说,我仍不十分明白,希望有机会跟帖探讨,谢谢。

稍后分数送上。
gwinner 2009-05-31
  • 打赏
  • 举报
回复
参考一下这个http://wenwen.soso.com/z/q113500653.htm
The_facE 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangk 的回复:]
对了,如果是XP sp2,而且安装了Wlanapi.dll,可以直接使用WlanEnumInterfaces枚举无线网卡
http://msdn.microsoft.com/en-us/library/ms706716(VS.85).aspx
[/Quote]

正在尝试此举,研究一下。
ArcRain 2009-05-30
  • 打赏
  • 举报
回复
我觉得还是注册表的好,而且在网卡被禁用的时候,Iphelper的函数是拿不到网卡的,注册表可以枚举出来,毕竟计算机上的硬件信息都在注册表里有记录的。
The_facE 2009-05-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 songtao_01 的回复:]
_IP_ADAPTER_INFO结构下的Description不知道是不是描述网卡信息的,如果是可以看字段里面有没有wireless,呵呵,拙见!
[/Quote]

这个想法我也考虑过,但是这个我个人觉得太不保险了。我无法确认所有无线网卡的Description是不是都是同样的描述标准。
songtao_01 2009-05-28
  • 打赏
  • 举报
回复
_IP_ADAPTER_INFO结构下的Description不知道是不是描述网卡信息的,如果是可以看字段里面有没有wireless,呵呵,拙见!
wangk 2009-05-27
  • 打赏
  • 举报
回复
对了,如果是XP sp2,而且安装了Wlanapi.dll,可以直接使用WlanEnumInterfaces枚举无线网卡
http://msdn.microsoft.com/en-us/library/ms706716(VS.85).aspx
The_facE 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yearn520 的回复:]
判断注册表示不明智的方法,你不时可以得到适配器信息吗
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while(pAdapter){
AfxMessageBox( pAdapter->AdapterName);
AfxMessageBox(pAdapter->Description);
pAdapter = pAdapter->Next;
}
这里的名字里面可以初步判断,比如vm之类开头的的是虚拟机,(zd……)ieee 80..之类的是无线网卡
没有很好的办法。还有那个无线也ping的通的。。区别不时很大
[/Quote]

这个......为何判断注册表是不明智的?
另:初步判断这种事情是不可以的。公司的产品是不会让我模棱两可的。
无线网卡的密钥是否取得的检验还有没有其它办法?下午活太多MprAdminInterfaceGetInfo还没来得及看,明后天再看看吧。
blackcat242 2009-05-27
  • 打赏
  • 举报
回复
不知道如何判断,关注中,帮顶一个
yearn520 2009-05-27
  • 打赏
  • 举报
回复
判断注册表示不明智的方法,你不时可以得到适配器信息吗
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while(pAdapter){
AfxMessageBox( pAdapter->AdapterName);
AfxMessageBox(pAdapter->Description);
pAdapter = pAdapter->Next;
}
这里的名字里面可以初步判断,比如vm之类开头的的是虚拟机,(zd……)ieee 80..之类的是无线网卡
没有很好的办法。还有那个无线也ping的通的。。区别不时很大
ArcRain 2009-05-27
  • 打赏
  • 举报
回复
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0014(0014根据不同的电脑有差异)
0014的键值里有个NetCfgInstanceId,就是那个AdapterName
然后下面的子键Ndi\Interface的键值有个LowerRange, UpperRange
LowerRange判断是不是网卡, UpperRange判断是不是无线,普通的有线网卡大概是ndis5,无线的可能会是wifi,还有另外个忘了.
The_facE 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dream238 的回复:]
额,区别无线和有线网卡,我以前自己写小程序时是根据网卡IP_ADAPTER_INFO里的AdapterName去查找注册表中相应的网卡
然后再从那个网卡的注册表信息中区分无线和有线的.

后面两个问题不知道,Mark关注下~
[/Quote]

能具体说一下是注册表的哪一项吗?我在
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters

里面都找到了网卡名,可是里面那么多参数,哪个是相关数据我不是很清楚的说。
The_facE 2009-05-27
  • 打赏
  • 举报
回复
谢谢各位,我再看看。

刚才找到一个让我有些崩溃的帖子。

How do I know from GetAdaptersInfo what is the adapter type?
Asked by UdiRaz in C++ Programming Language
Tags: c++, MFC
Hi,

IP_ADAPTER_INFO.Type returns 6 for all the adapters GetAdaptersInfo found.

I understand that 6 stands for MIB_IF_TYPE_ETHERNET but I have three adapters in this list.
The regular adapter that I connect my lapto into the wired net ( and the one I search ),
Wireless and bluethooth.

How can I distinguish between them? I am seaching the MAC address of the wired and need a way to know what it is out the three I have.

Thanks,
Udi Raz
--------------------------------------------------------------------------------------------------------------

Gurudenis:
There's no easy way, but you can retrieve their names and try to determine which of them is the one you need.

看来还真不容易辨识
wangk 2009-05-27
  • 打赏
  • 举报
回复
1. 貌似不可以。

2.据说GetIfEntry的dwOperStatus变量可以判断状态,具体请参考MSDN

3.我印象中网关(AP)是通的,其他都不行,给你分配的IP是一个随机的。

4.MprAdminInterfaceGetInfo似乎可以,你可以试试。
ArcRain 2009-05-27
  • 打赏
  • 举报
回复
额,区别无线和有线网卡,我以前自己写小程序时是根据网卡IP_ADAPTER_INFO里的AdapterName去查找注册表中相应的网卡
然后再从那个网卡的注册表信息中区分无线和有线的.

后面两个问题不知道,Mark关注下~

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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