求WIFI网卡控制方法

The_Only_Name_2 2010-07-27 02:58:32
现在机器上有个无线网卡,想通过编程实现对网卡的控制:
1,枚举机器上的无线网卡
2,禁用和启动无线网卡
3,获取网卡的IP、MAC等信息
4,修改网卡配置
5,枚举可用WIFI信号
6,连接至某个无线路由
7,从当前连接的无线路由断开

求高人指点实现方法,不一定要源码,告诉我关键字或者相应的函数我自己搜也可以。
拜谢!
...全文
629 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
CRICH_MOON 2010-12-23
  • 打赏
  • 举报
回复
上面代码编译不通过
貌似要定义什么宏?
tmk8175 2010-09-06
  • 打赏
  • 举报
回复
上面的可以获取wifi的信息
tmk8175 2010-09-06
  • 打赏
  • 举报
回复
#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>
#include <wlanapi.h>
#include <objbase.h>
#include <wtypes.h>

#include <stdio.h>
#include <stdlib.h>

// Need to link with Wlanapi.lib and Ole32.lib
#pragma comment(lib, "wlanapi.lib")
#pragma comment(lib, "ole32.lib")

int wmain()
{

// Declare and initialize variables.

HANDLE hClient = NULL;
DWORD dwMaxClient = 2; //
DWORD dwCurVersion = 0;
DWORD dwResult = 0;
int iRet = 0;

WCHAR GuidString[40] = {0};

int i;

/* variables used for WlanEnumInterfaces */

PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
PWLAN_INTERFACE_INFO pIfInfo = NULL;


dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);
// FormatMessage can be used to find out why the function failed
return 1;
}

dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
// FormatMessage can be used to find out why the function failed
return 1;
}
else {
wprintf(L"Num Entries: %lu\n", pIfList->dwNumberOfItems);
wprintf(L"Current Index: %lu\n", pIfList->dwIndex);
for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) {
pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
wprintf(L" Interface Index[%d]:\t %lu\n", i, i);
iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 39);
// For c rather than C++ source code, the above line needs to be
// iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 39);
if (iRet == 0)
wprintf(L"StringFromGUID2 failed\n");
else {
wprintf(L" InterfaceGUID[%d]: %ws\n",i, GuidString);
}
wprintf(L" Interface Description[%d]: %ws", i,
pIfInfo->strInterfaceDescription);
wprintf(L"\n");
wprintf(L" Interface State[%d]:\t ", i);
switch (pIfInfo->isState) {
case wlan_interface_state_not_ready:
wprintf(L"Not ready\n");
break;
case wlan_interface_state_connected:
wprintf(L"Connected\n");
break;
case wlan_interface_state_ad_hoc_network_formed:
wprintf(L"First node in a ad hoc network\n");
break;
case wlan_interface_state_disconnecting:
wprintf(L"Disconnecting\n");
break;
case wlan_interface_state_disconnected:
wprintf(L"Not connected\n");
break;
case wlan_interface_state_associating:
wprintf(L"Attempting to associate with a network\n");
break;
case wlan_interface_state_discovering:
wprintf(L"Auto configuration is discovering settings for the network\n");
break;
case wlan_interface_state_authenticating:
wprintf(L"In process of authenticating\n");
break;
default:
wprintf(L"Unknown state %ld\n", pIfInfo->isState);
break;
}
wprintf(L"\n");
}
}

if (pIfList != NULL) {
WlanFreeMemory(pIfList);
pIfList = NULL;
}
return 0;
}

The_Only_Name_2 2010-08-11
  • 打赏
  • 举报
回复
用的WINDOWS API
The_Only_Name_2 2010-07-29
  • 打赏
  • 举报
回复
InitialJ
VisualEleven
你们两位都是说通过DDK来编程吧?可是DDK正如InitialJ所说的,写到后面,还是要网卡的厂商提供接口,他不提供就没辙,这感觉是个死胡同,而且DDK程序的开发环境也不是一般的VC吧?好像如此

群里找有说WINPCAP编程实现的,我看了下WINPCAP,他的自述文件只提到无线网络的配置,没有提到有控制网络连接和断开的功能啊。

另外有说WINDOWS SDK实现,
Run-Time Requirements
The Native Wifi component requires clients running Windows Vista, Windows XP with SP3, or Wireless LAN API for Windows XP with SP2.
我的系统就是SP3的,可是提示我WINPCAP.H找不到

太多说法了,看得我眼花缭乱,我希望实际开发过这样的项目的朋友告诉我怎样实现,不是说凭自己想像或者是估计。凭我的想像,打开VC6.0,打开WINDOWS API大全就可以完成,可实际不是这么回事。
Eleven 2010-07-27
  • 打赏
  • 举报
回复
得到无线信号,需要用到驱动编程
http://www.qqgb.com/Program/VC/VCJQ/Program_167500.html
Eleven 2010-07-27
  • 打赏
  • 举报
回复
GetAdaptersAddress();参考MSDN
InitialJ 2010-07-27
  • 打赏
  • 举报
回复
控制部分可以按如下方法试试,首先使用CreateFile()打开Windows自带的ndisuio协议驱动(WZC就是使用的它),使用DeviceIoControl()与所需控制的网卡绑定,接下来就可以通过DeviceIoControl()接口通过特定的OID来查询或设置网卡的OID了,前提是你有相关OID的资料及与之关联的数据的结构,WINDDK里会提供通用的OID,但无线网卡芯片厂商都会有自己专属的OID,而不是其大客户就别想得到这些资料.
InitialJ 2010-07-27
  • 打赏
  • 举报
回复
GetAdaptersInfo Function

The GetAdaptersInfo function retrieves adapter information for the local computer.

On Windows XP and later: Use the GetAdaptersAddresses function instead of GetAdaptersInfo.

Syntax
DWORD GetAdaptersInfo(
__out PIP_ADAPTER_INFO pAdapterInfo,
__inout PULONG pOutBufLen
);

The_Only_Name_2 2010-07-27
  • 打赏
  • 举报
回复
就是要自己写一个 无线网卡客户端应用程序
Bzeek 能将你的无线网卡变成 WiFi 热点,让其他设备连接,并且能分享给其他人,俨然 FON 的不需要硬件版本。 Bzeek 的目的是一个全球性的无线网络,在 Bzeek 看来,每个人都有权让互联网无处不在。在家中或者办公室里,我们可以随时使用互联网,但当你在室外时,很少能发现 Wifi 热点,一般仅仅在咖啡馆、机场等地方,而且大多还是加密的。。。 Bzeek 与 Connectify 十分类似,都是让无线网卡变成 Wifi 热点,然后让其他设备使用。但 Connectify 支持的设备相当的少,Intel 的全系列网卡都被排除在外,以至于小众一直无法测试。Bzeek 用起来就简单多了,自动安装,无法选择安装目录,并且安装过程中会短暂断网(卸载过程中也会短暂断网,应该是该过程中在安装网卡驱动),安装后无需任何设置就可以直接使用了。 话说 Bzeek 与 FON 相当类似,因为 Bzeek 虽然可以选择关闭热点,但无法对其加密,同样 FON 虽然可以加密私有热点,但始终会有一个不加密的热点公开。并且,两者都可以通过其网络分享你的带宽赚钱。 当你运行 Bzeek 后,你可以邀请自己或者朋友免费使用你的网络,而陌生人可以免费使用 1 个小时,如果想继续通过 Bzeek 共享的无线网络上网,则需要用短信等方式向你和 Bzeek 支付一定费用。如果不付费,则会在浏览网页的时候看到一些 Bzeek 投放的 Google 广告,不过不影响你浏览网页。是不是和 FON 很像呢? 当然,区别也是有的,FON 必须使用专属无线路由,小众有一枚,炫耀一下。 Bzeek 本地没有设置界面,仅能控制是否打开 wifi 热点,而其控制端在 Bzeek 的网页,你可以浏览连接到你的 wifi 的设备,免费分享 wifi 给好友。另外,你分享给好友多久无线网络,就可以在其他地方免费使用 Bzeek 的无线网络相同时间。

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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