读书人

搜索无线网络列表有关问题

发布时间: 2012-04-05 12:42:40 作者: rapoo

搜索无线网络列表问题
从网上下载了一分代码 搜索无线网络列表的~~

可是 在一台电脑上 可以搜索到,另外一台去始终找不到 返回错误 31 连接的设备没有发挥作用..

有哪位大侠这个是什么原因么~~~

C/C++ code
#include <stdio.h> #include <stdlib.h> #include <winsock2.h> #define NUMBEROFSSIDS 10 #define FILE_DEVICE_PHYSICAL_NETCARD 23#define FILE_ANY_ACCESS 0#define METHOD_OUT_DIRECT 2#define CTL_CODE(DeviceType, Function, Method, Access)( \  ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))#define _NDIS_CONTROL_CODE(request, method)  CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, request, method, FILE_ANY_ACCESS) #define IOCTL_NDIS_QUERY_aGLOBAL_STATS _NDIS_CONTROL_CODE(0, METHOD_OUT_DIRECT) #define OID_802_11_BSSID 0x0D010101 #define OID_802_11_SSID 0x0D010102 #define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0D010203 #define OID_802_11_NETWORK_TYPE_IN_USE 0x0D010204 #define OID_802_11_TX_POWER_LEVEL 0x0D010205 #define OID_802_11_RSSI 0x0D010206 #define OID_802_11_RSSI_TRIGGER 0x0D010207 #define OID_802_11_INFRASTRUCTURE_MODE 0x0D010108 #define OID_802_11_FRAGMENTATION_THRESHOLD 0x0D010209 #define OID_802_11_RTS_THRESHOLD 0x0D01020A #define OID_802_11_NUMBER_OF_ANTENNAS 0x0D01020B #define OID_802_11_RX_ANTENNA_SELECTED 0x0D01020C #define OID_802_11_TX_ANTENNA_SELECTED 0x0D01020D #define OID_802_11_SUPPORTED_RATES 0x0D01020E #define OID_802_11_DESIRED_RATES 0x0D010210 #define OID_802_11_CONFIGURATION 0x0D010211 #define OID_802_11_STATISTICS 0x0D020212 #define OID_802_11_ADD_WEP 0x0D010113 #define OID_802_11_REMOVE_WEP 0x0D010114 #define OID_802_11_DISASSOCIATE 0x0D010115 #define OID_802_11_POWER_MODE 0x0D010216 #define OID_802_11_BSSID_LIST 0x0D010217 #define OID_802_11_AUTHENTICATION_MODE 0x0D010118 #define OID_802_11_PRIVACY_FILTER 0x0D010119 #define OID_802_11_BSSID_LIST_SCAN 0x0D01011A #define OID_802_11_WEP_STATUS 0x0D01011B #define OID_802_11_RELOAD_DEFAULTS 0x0D01011C typedef enum _NDIS_802_11_NETWORK_TYPE {     Ndis802_11FH,     Ndis802_11DS,     Ndis802_11NetworkTypeMax  } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; typedef LONG NDIS_802_11_RSSI; typedef struct _NDIS_802_11_CONFIGURATION_FH {     ULONG Length;     ULONG HopPattern;     ULONG HopSet;     ULONG DwellTime; } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; typedef struct _NDIS_802_11_CONFIGURATION {     ULONG Length;     ULONG BeaconPeriod;     ULONG ATIMWindow;     ULONG DSConfig;     NDIS_802_11_CONFIGURATION_FH    FHConfig; } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE {     Ndis802_11IBSS,     Ndis802_11Infrastructure,     Ndis802_11AutoUnknown,     Ndis802_11InfrastructureMax } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE; typedef enum _NDIS_802_11_AUTHENTICATION_MODE {     Ndis802_11AuthModeOpen,     Ndis802_11AuthModeShared,     Ndis802_11AuthModeAutoSwitch,     Ndis802_11AuthModeMax  } NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE; typedef UCHAR NDIS_802_11_RATES[8]; typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; typedef struct _NDIS_802_11_SSID {     ULONG SsidLength;     UCHAR Ssid[32]; } NDIS_802_11_SSID, *PNDIS_802_11_SSID; typedef struct _NDIS_WLAN_BSSID {     ULONG Length;     NDIS_802_11_MAC_ADDRESS MacAddress;     UCHAR Reserved[2];     NDIS_802_11_SSID Ssid;     ULONG Privacy;     NDIS_802_11_RSSI Rssi;     NDIS_802_11_NETWORK_TYPE NetworkTypeInUse;     NDIS_802_11_CONFIGURATION Configuration;     NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;     NDIS_802_11_RATES SupportedRates; } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID; typedef struct _NDIS_802_11_BSSID_LIST {     ULONG NumberOfItems;     NDIS_WLAN_BSSID Bssid[1]; } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST; BOOL wif_adapterget(HKEY hKey, char *szPath, char *szKey, char *szBuffer, DWORD dwSize) {     HKEY rk = NULL;     if (RegOpenKeyEx(hKey, szPath, 0, KEY_READ, &rk) != ERROR_SUCCESS) return FALSE;     if (RegQueryValueEx(rk,         szKey,         NULL,         NULL,         (unsigned char *)szBuffer,         &dwSize) != ERROR_SUCCESS) return FALSE;     RegCloseKey(rk);     return TRUE; } BOOL wif_adapterlist() {     char szAdapter[128], szDescription[128], szKey[128], szServiceName[128];     DWORD dwSize = 256;     HKEY rk = NULL;     int i = 0;     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,         "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards",         0,         KEY_READ,         &rk) == ERROR_SUCCESS)     {         while (RegEnumKeyEx(rk,             i,             szKey,             &dwSize,             NULL,             NULL,             NULL,             NULL) == ERROR_SUCCESS)         {             _snprintf(szAdapter,                 sizeof(szAdapter) - 1,                 "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\%s",                 szKey);             wif_adapterget(HKEY_LOCAL_MACHINE,                 szAdapter,                 "Description",                 szDescription,                 sizeof(szDescription));             wif_adapterget(HKEY_LOCAL_MACHINE,                 szAdapter,                 "ServiceName",                 szServiceName,                 sizeof(szServiceName));             printf("[+] %s - %s (%s)\n", szKey, szDescription, szServiceName);             memset(szDescription, 0, sizeof(szDescription));             memset(szServiceName, 0, sizeof(szServiceName));             _snprintf(szAdapter,                 sizeof(szAdapter) - 1,                 "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\%s",                 argv[1]);             wif_adapterget(HKEY_LOCAL_MACHINE,                 szAdapter,                 "Description",                 szDescription,                 sizeof(szDescription) - 1);             wif_adapterget(HKEY_LOCAL_MACHINE,                 szAdapter,                 "ServiceName",                 szServiceName,                 sizeof(szServiceName) - 1);             printf("[+] Opening adapter: %s...\n", szDescription);             hAdapter = wif_adapteropen(szServiceName);             if (hAdapter == INVALID_HANDLE_VALUE)             {                 printf("[+] Failed to open adapter: %s!\n", szDescription);                 return 0;             }             printf("[+] Scanning for networks...\n");             if (!wif_networklist(hAdapter))             {                 printf("[+] No networks found!\n");                 return 0;             }             dwSize = 256;             i++;         }         RegCloseKey(rk);     }     if (!i)         return FALSE;     return TRUE; } HANDLE wif_adapteropen(char *szAdapterName) {     HANDLE hAdapter;     char szAdapter[MAX_PATH];     _snprintf(szAdapter, sizeof(szAdapter) - 1, "\\\\.\\%s", szAdapterName);     hAdapter = CreateFile(szAdapter,         GENERIC_READ,         FILE_SHARE_READ |         FILE_SHARE_WRITE,         NULL,         OPEN_EXISTING,         0,         NULL);     return hAdapter; } BOOL wif_networkconnect(HANDLE hAdapter, char *szSSID) {     DWORD dwBytes, dwOIDCode;     dwOIDCode = Ndis802_11Infrastructure;     //Dissassociate     if (!DeviceIoControl(hAdapter,         OID_802_11_INFRASTRUCTURE_MODE,         &dwOIDCode,         sizeof(dwOIDCode),         NULL,         0,         &dwBytes,         NULL)) return FALSE;     dwOIDCode = Ndis802_11AuthModeOpen;     if (!DeviceIoControl(hAdapter,         OID_802_11_AUTHENTICATION_MODE,         &dwOIDCode,         sizeof(dwOIDCode),         NULL,         0,         &dwBytes,         NULL)) return FALSE;     //Set SSID     // START CODING FROM HERE, NUBZ. -D-oNe     return TRUE; }  



[解决办法]
没搞过这个,不过你可以跟踪一下,看看返回的地点是那个函数造成的
[解决办法]
有时候有AP,无线网卡还是搜索不到网络...

读书人网 >VC/MFC

热点推荐