搜索无线网络列表问题
从网上下载了一分代码 搜索无线网络列表的~~
可是 在一台电脑上 可以搜索到,另外一台去始终找不到 返回错误 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,无线网卡还是搜索不到网络...