Exemple #1
0
void								wififriend_scan_network(GtkWidget* Widget, gpointer Data)
{
	DWORD							Error = ERROR_SUCCESS;
	PWLAN_AVAILABLE_NETWORK_LIST	Network = NULL;
	t_wifi							St;
	int								I;
	GtkWidget						*WinScan = NULL;
	GtkWidget						*ListOfWifi = NULL;

	I = 1;
	St = wififriend_create_handle();
	St = wififriend_retrieve_config(St);
	if((WlanGetAvailableNetworkList(St.MyHandle, &St.MyGuid, 0x00000001, NULL, &Network)) != ERROR_SUCCESS)
		error_scan(0);
	else
	{
		WinScan = create_window(236, 27, "Wifi scan");
		ListOfWifi = gtk_combo_box_new_text();
		while(I != Network->dwNumberOfItems)
		{
			gtk_combo_box_prepend_text(GTK_COMBO_BOX(ListOfWifi), (const gchar *)Network->Network[I].dot11Ssid.ucSSID);
			I++;
		}
		gtk_combo_box_set_active(GTK_COMBO_BOX(ListOfWifi), 0);
		gtk_container_add(GTK_CONTAINER(WinScan), ListOfWifi);
		g_signal_connect(G_OBJECT(ListOfWifi), "changed", G_CALLBACK(wififriend_connect_to_unsecure_network), (gpointer)ListOfWifi);
		display_interface(WinScan);
		WlanCloseHandle(St.MyHandle, NULL);
	}
}
Exemple #2
0
bool Wlan::IsNetAvailable( const char * ssid )
{
    bool result = false;

    if (OpenHandle()) {
        PWLAN_INTERFACE_INFO_LIST wlanInterfaces;

        if (WlanEnumInterfaces( m_handle, NULL, &wlanInterfaces ) == ERROR_SUCCESS) {
            for (int i = 0; i < wlanInterfaces->dwNumberOfItems; i++) {
                if (wlanInterfaces->InterfaceInfo[i].isState == wlan_interface_state_connected) {
                    PWLAN_AVAILABLE_NETWORK_LIST wlanNetworks;

                    if (WlanGetAvailableNetworkList( m_handle, &wlanInterfaces->InterfaceInfo[i].InterfaceGuid, 0, NULL, &wlanNetworks ) == ERROR_SUCCESS) {
                        for (int j = 0; j < wlanNetworks->dwNumberOfItems; j++) {
                            if (_strnicmp( (const char *) wlanNetworks->Network[j].dot11Ssid.ucSSID, ssid, strlen(ssid) ) == 0) {
                                result = true;
                                break;
                            }
                        }

                        WlanFreeMemory( wlanNetworks );
                    }
                }
            }

            WlanFreeMemory( wlanInterfaces );
        }
    }

    return result;
}
Exemple #3
0
/*
 * Get the index of the first available network in the list on an interface
 */
DWORD GetIfaceAvailableSSID (HANDLE h,
                             const GUID *iface,
                             const wchar_t *ifname,
                             WLANKEY *keys,
                             int *index,
                             WLAN_REASON_CODE *reason){
	WLAN_AVAILABLE_NETWORK_LIST *netlist = NULL;
	DWORD status;
	int i;
	int j;
	int k;
	wchar_t det_ssid[65];

	fwprintf (stderr, L"Getting available networks on interface \"%s\"\n", ifname);
	status = WlanGetAvailableNetworkList(h, iface, 0, NULL, &netlist);
	if (netlist != NULL){
		fwprintf (stderr, L"%d networks in NetList\n", netlist->dwNumberOfItems);
		for (j = 0; j < netlist->dwNumberOfItems; j++){
			for (k = 0; k < netlist->Network[j].dot11Ssid.uSSIDLength; k++){
				det_ssid[k] = netlist->Network[j].dot11Ssid.ucSSID[k];
			}
			det_ssid[k] = 0;
			fwprintf (stderr, L"Network %d: SSID=%ls\n", j, det_ssid);
		}
		for (i = 0; keys[i].ssid[0] != 0; i++){
			for (j = 0; j < netlist->dwNumberOfItems; j++){
				for (k = 0; k < netlist->Network[j].dot11Ssid.uSSIDLength; k++){
					det_ssid[k] = netlist->Network[j].dot11Ssid.ucSSID[k];
				}
				det_ssid[k] = 0;
				if (wcscmp(keys[i].ssid, det_ssid) == 0){
					fwprintf (stderr, L"Network %d is in the profile list\n", j);
					*index = i;
					WlanFreeMemory(netlist);
					return status;
				}
			}
		}
		fwprintf (stderr, L"No detected networks are in the profile list\n");
		WlanFreeMemory(netlist);
	} else {
		fwprintf (stderr, L"NetList is NULL\n");
	}
	return status;
}
Exemple #4
0
PLUGIN_EXPORT double Update(void* data)
{
	if (g_pInterface == nullptr) return 0;

	MeasureData* measure = (MeasureData*)data;
	double value = 0;

	if (measure->type != UNKNOWN)
	{
		if (measure->type == LIST)
		{
			PWLAN_AVAILABLE_NETWORK_LIST pwnl = nullptr;
			DWORD dwErr = WlanGetAvailableNetworkList(g_hClient, &g_pInterface->InterfaceGuid, 0, nullptr, &pwnl);

			if (ERROR_SUCCESS != dwErr)
			{
				measure->statusString = L"Error";
			}
			else
			{
				// Size of network name can be up to 64 chars, set to 80 to add room for delimiters
				measure->statusString.clear();
				measure->statusString.reserve(80 * measure->listMax);

				UINT printed = 0;  // count of how many networks have been printed already

				// Check all items in WLAN NETWORK LIST
				for (size_t i = 0; i < pwnl->dwNumberOfItems ; ++i)
				{
					if (printed == measure->listMax) break;

					// SSID is in UCHAR, convert to WCHAR
					std::wstring ssid = ConvertToWide((LPCSTR)pwnl->Network[i].dot11Ssid.ucSSID, (int)pwnl->Network[i].dot11Ssid.uSSIDLength);

					// Prevent duplicates that result from profiles, check using SSID
					if (!ssid.empty() && ssid[0] && wcsstr(measure->statusString.c_str(), ssid.c_str()) == nullptr)
					{
						++printed;
						measure->statusString += ssid;
						if (measure->listStyle > 0)
						{
							if (measure->listStyle == 1 || measure->listStyle == 3)
							{
								// ADD PHY type
								measure->statusString += L" @";
								measure->statusString += ToString(pwnl->Network[i].dot11PhyTypes[0]);
							}
							if (measure->listStyle == 2 || measure->listStyle == 3)
							{
								// ADD cipher and authentication
								measure->statusString += L" (";
								measure->statusString += ToString(pwnl->Network[i].dot11DefaultCipherAlgorithm);
								measure->statusString += L':';
								measure->statusString += ToString(pwnl->Network[i].dot11DefaultAuthAlgorithm);
								measure->statusString += L')';
							}
						}
						measure->statusString += L'\n';
					}
				}

				WlanFreeMemory(pwnl);
			}
		}
		else if (measure->type == TXRATE)
		{
			DWORD dwErr = getAdapterAddresses(&g_pAddresses);
			if (NO_ERROR != dwErr) {
				measure->statusString = L"Error";
				value = (double)-1;
			}
			else
			{
				PIP_ADAPTER_ADDRESSES pCurrAddresses = g_pAddresses;
				value = (double)-1;
				while(pCurrAddresses)
				{
					// Doesn't work - not sure how to compare the 2 GUIDs
					// if (pCurrAddresses->NetworkGuid != g_pInterface->InterfaceGuid)
					// Ignores the interface index parameter - whoops.
					if (IF_TYPE_IEEE80211 != pCurrAddresses->IfType)
					{
						pCurrAddresses = pCurrAddresses->Next;
						continue;
					}
					value = (double)pCurrAddresses->TransmitLinkSpeed;
					break;
				}
			}
			if (g_pAddresses != nullptr)
			{
				FREE(g_pAddresses);
			}
		}
		else
		{
			ULONG outsize = 0;
			PWLAN_CONNECTION_ATTRIBUTES wlan_cattr = nullptr;
			DWORD dwErr = WlanQueryInterface(g_hClient, &g_pInterface->InterfaceGuid, wlan_intf_opcode_current_connection, nullptr, &outsize, (PVOID*)&wlan_cattr, nullptr);

			if (ERROR_SUCCESS != dwErr)
			{
				switch (measure->type)
				{
				case SSID:
				case PHY:
				case ENCRYPTION:
				case AUTH:
					measure->statusString = L"-1";
					break;
				}
			}
			else
			{
				switch (measure->type)
				{
// This rate is currently bogus, sadly :-(
//				case TXRATE:
//					value = (double)wlan_cattr->wlanAssociationAttributes.ulTxRate;
//					break;

				case QUALITY:
					value = (double)wlan_cattr->wlanAssociationAttributes.wlanSignalQuality;
					break;

				case SSID:
					// Need to convert ucSSID to wchar from uchar
					measure->statusString = ConvertToWide((LPCSTR)wlan_cattr->wlanAssociationAttributes.dot11Ssid.ucSSID, (int)wlan_cattr->wlanAssociationAttributes.dot11Ssid.uSSIDLength);
					// If not connected yet add current status
					measure->statusString += ToString(wlan_cattr->isState);
					break;

				case PHY:
					measure->statusString = ToString(wlan_cattr->wlanAssociationAttributes.dot11PhyType);
					break;

				case ENCRYPTION:
					measure->statusString = ToString(wlan_cattr->wlanSecurityAttributes.dot11CipherAlgorithm);
					break;

				case AUTH:
					measure->statusString = ToString(wlan_cattr->wlanSecurityAttributes.dot11AuthAlgorithm);
					break;

				default:  // Invalid type
					measure->statusString.clear();
					break;
				}

				WlanFreeMemory(wlan_cattr);
			}
		}
	}

	return value;
}
Exemple #5
0
int main(int argc, char *argv[])
{
HANDLE hWlan = NULL;

	DWORD dwError = 0;
	DWORD dwSupportedVersion = 0;
	DWORD dwClientVersion = (IsVistaOrHigher() ? 2 : 1);

	GUID guidInterface; ZeroMemory(&guidInterface, sizeof(GUID));

	WLAN_INTERFACE_INFO_LIST *wlanInterfaceList = (WLAN_INTERFACE_INFO_LIST*)WlanAllocateMemory(sizeof(WLAN_INTERFACE_INFO_LIST));
	ZeroMemory(wlanInterfaceList, sizeof(WLAN_INTERFACE_INFO_LIST));

	WLAN_AVAILABLE_NETWORK_LIST *wlanNetworkList = (WLAN_AVAILABLE_NETWORK_LIST*)WlanAllocateMemory(sizeof(WLAN_AVAILABLE_NETWORK_LIST));
	ZeroMemory(wlanNetworkList, sizeof(WLAN_AVAILABLE_NETWORK_LIST));

	try
	{
		if(dwError = WlanOpenHandle(dwClientVersion, NULL, &dwSupportedVersion, &hWlan) != ERROR_SUCCESS)
			throw("[x] Unable access wireless interface");

		if(dwError = WlanEnumInterfaces(hWlan, NULL, &wlanInterfaceList) != ERROR_SUCCESS)
			throw("[x] Unable to enum wireless interfaces");

		wprintf(L"[!] Found adapter %s\n", wlanInterfaceList->InterfaceInfo[0].strInterfaceDescription);

		if(dwError = wlanInterfaceList->InterfaceInfo[0].isState != wlan_interface_state_not_ready)
		{
				if(wlanInterfaceList->dwNumberOfItems > 1)
				{
					// TODO: Add processing for multiple wireless cards here
					printf("[!] Detected multiple wireless adapters, using default\n");
					guidInterface = wlanInterfaceList->InterfaceInfo[0].InterfaceGuid;
				}
				else
				{
					guidInterface = wlanInterfaceList->InterfaceInfo[0].InterfaceGuid;
				}
		}
		else
			throw("[x] Default wireless adapter disabled");

		DWORD dwPrevNotif = 0;

		// Scan takes awhile so we need to register a callback
		if(dwError = WlanRegisterNotification(hWlan, WLAN_NOTIFICATION_SOURCE_ACM, TRUE,
		  (WLAN_NOTIFICATION_CALLBACK)WlanNotification, NULL, NULL, &dwPrevNotif) != ERROR_SUCCESS)
			throw("[x] Unable to register for notifications");

		printf("[i] Scanning for nearby networks...\n");
		if(dwError = WlanScan(hWlan, &guidInterface, NULL, NULL, NULL) != ERROR_SUCCESS)
			throw("[x] Scan failed, check adapter is enabled");

		// Yawn...
		while(bWait)
			Sleep(100);

		// Unregister callback, don't care if it succeeds or not
		WlanRegisterNotification(hWlan, WLAN_NOTIFICATION_SOURCE_NONE, TRUE, NULL, NULL, NULL, &dwPrevNotif);

		if(dwError = WlanGetAvailableNetworkList(hWlan, &guidInterface, NULL, NULL, &wlanNetworkList) != ERROR_SUCCESS)
			throw("[x] Unable to obtain network list");

		for(unsigned int i = 0; i < wlanNetworkList->dwNumberOfItems; i++)
		{
				printf("\nSSID:\t\t\t%s\nSIGNAL:\t\t\t%d%%\n",
						wlanNetworkList->Network[i].dot11Ssid.ucSSID,
						wlanNetworkList->Network[i].wlanSignalQuality);

				printf("SECURITY:\t\t");
				switch(wlanNetworkList->Network[i].dot11DefaultAuthAlgorithm)
				{
						case DOT11_AUTH_ALGO_80211_OPEN:
						case DOT11_AUTH_ALGO_80211_SHARED_KEY:
							printf("WEP");
						break;

						case DOT11_AUTH_ALGO_WPA:
						case DOT11_AUTH_ALGO_WPA_PSK:
						case DOT11_AUTH_ALGO_WPA_NONE:
							printf("WPA");
						break;

						case DOT11_AUTH_ALGO_RSNA:
						case DOT11_AUTH_ALGO_RSNA_PSK:
							printf("WPA2");
						break;

						default:
							printf("UNKNOWN");
						break;
				}
				printf("\n");
		}
	}
	catch(char *szError)
	{
		printf("%s (0x%X)\nQuitting...\n", szError);
	}

	if(wlanNetworkList)
		WlanFreeMemory(wlanNetworkList);
	if(wlanInterfaceList)
		WlanFreeMemory(wlanInterfaceList);
	if(hWlan)
		WlanCloseHandle(hWlan, NULL);

	return dwError;
}
Exemple #6
0
int _tmain(int argc, _TCHAR* argv[])
{
	bool first_run=true;
	DWORD dwRetVal = 0;
	while(1)
	{
	/*Test per funzione di errore*/
	std::map<std::string, int> lMacAddress_TEST;
	
	// Declare and initialize variables.

    HANDLE hClient = NULL;		//Handle del client utilizzato nella sessione corrente
    DWORD dwMaxClient = 2;      //E' una costante che va inserita in WlanOpenHandle (1->Win XP SP2/3 | 2->Win Vista/Server 2008)    
    DWORD dwCurVersion = 0;		//Versione della WLAN API attualmente utilizzata da inserire nella WlanOpenHandle
    DWORD dwResult = 0;
    
    int iRet = 0;
    
    WCHAR GuidString[39] = {0};		//Conterrà un GUID sottoforma di stringa di caratteri

    unsigned int i, j, k;

    /* variables used for WlanEnumInterfaces  */

    PWLAN_INTERFACE_INFO_LIST pIfList = NULL;	//Contiene un array di NIC con relative informazioni
    PWLAN_INTERFACE_INFO pIfInfo = NULL;		//Contiene le informazioni relative ad una NIC (ID, Descrizione, Stato)

    PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL;	//Contiene un array di reti con relative informazioni
    PWLAN_AVAILABLE_NETWORK pBssEntry = NULL;		//Contiene info relative ad una rete raggiungibile (es. SSID, qualità segnale, algoritmo cifratura)
    
    int iRSSI = 0;

    dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient); //Apre una connessione con il server
    if (dwResult != ERROR_SUCCESS)
		{
        wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);
        return 1;
        // You can use FormatMessage here to find out why the function failed
		}

    dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList); //Inserisce in pIfList l'elenco delle NIC abilitate sul pc
    if (dwResult != ERROR_SUCCESS) 
		{
        wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
        return 1;
        // You can use FormatMessage here to find out why the function failed
		} 
	else 
		{
        wprintf(L"Num Entries: %lu\n", pIfList->dwNumberOfItems); //Numero NIC trovate
        wprintf(L"Current Index: %lu\n", pIfList->dwIndex);	//Indice NIC corrente
        for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) 
			{
            pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i]; //pIfInfo punta alla struttura con le informazioni relative alla NIC corrente
            wprintf(L"  Interface Index[%u]:\t %lu\n", i, i);
            iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString,	//Trasforma un GUID in stringa di caratteri 
                sizeof(GuidString)/sizeof(*GuidString));  //Numero di caratteri massimo per la stringa finale
            // For c rather than C++ source code, the above line needs to be
            // iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, 
            //     sizeof(GuidString)/sizeof(*GuidString)); 
            if (iRet == 0)	//Se StringFromGUID2 fallisce ritorna 0
                wprintf(L"StringFromGUID2 failed\n");
            else 
				{		//Altrimenti il numero di caratteri della stringa 
                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");

			//Inserisce in pBssList i dati delle reti disponibili
            dwResult = WlanGetAvailableNetworkList(hClient,		//Client handle ottenuto all'inizio
                                             &pIfInfo->InterfaceGuid,	//Interface GUID
                                             0, 
                                             NULL, 
                                             &pBssList);	//Puntatore alla lista delle entry trovate

            if (dwResult != ERROR_SUCCESS) 
				{
                wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n", dwResult);
                dwRetVal = 1;
                // You can use FormatMessage to find out why the function failed
				} 
			else 
				{
                wprintf(L"WLAN_AVAILABLE_NETWORK_LIST for this interface\n");

                wprintf(L"  Num Entries: %lu\n\n", pBssList->dwNumberOfItems);

                for (j = 0; j < pBssList->dwNumberOfItems; j++) 
					{
                    pBssEntry = (WLAN_AVAILABLE_NETWORK *) & pBssList->Network[j]; //pBssEntry punta alla struttura di informazioni relative alla rete corrente
                    wprintf(L"  Profile Name[%u]:  %ws\n", j, pBssEntry->strProfileName);
                    wprintf(L"  SSID[%u]:\t\t ", j);
                    if (pBssEntry->dot11Ssid.uSSIDLength == 0) //Se l'SSID ha lunghezza nulla va a capo
                        wprintf(L"\n");
                    else 
						{   
                        for (k = 0; k < pBssEntry->dot11Ssid.uSSIDLength; k++) 
							{
                            wprintf(L"%c", (int) pBssEntry->dot11Ssid.ucSSID[k]); //Scrittura a video dell SSID
							}
                        wprintf(L"\n");
						}
					
					//Prova per ottenere il MAC Address-----------------------------------------------
					//--------------------------------------------------------------------------------
					PWLAN_BSS_LIST pWlanBssList=NULL;
					DWORD uscita=0;
					DOT11_SSID Dot11Ssid=pBssEntry->dot11Ssid;
					
					WlanGetNetworkBssList(
						hClient,		//Client inizializzato precedentemente
						&(pIfInfo->InterfaceGuid),	//Interfaccia sul quale si fanno le misurazioni
						&(pBssEntry->dot11Ssid),	//Struttura del SSID correntemente analizzato
						dot11_BSS_type_infrastructure, //Cerca tra le interfacce di infrastruttura
						pBssEntry->bSecurityEnabled,	//Security policy dell'interfaccia corrente
						NULL,	//DEVE ESSERE NULL
						&pWlanBssList	//Struttura che sarà riempita con info opportune
						);
					if(uscita==ERROR_SUCCESS)
					wprintf(L"\n  GOOD Exit status Bss\n");
					wprintf(L"\n  Number of Bss entries: %u\n", pWlanBssList->dwNumberOfItems);
					//for(int z=0; z<(int)pWlanBssList->dwNumberOfItems;z++)
					//{
						PWLAN_BSS_ENTRY px = (WLAN_BSS_ENTRY *) & pWlanBssList->wlanBssEntries;
						std::string sMACAddress = PrintMACaddress(px->dot11Bssid);
					//}
					//std::cout << sMACAddress;

					/*----------------------------------------------------------------------------------*/
					/*----------------------------------------------------------------------------------*/
                    wprintf(L"  BSS Network type[%u]:\t ", j);
                    switch (pBssEntry->dot11BssType) 
						{
						case dot11_BSS_type_infrastructure   :
							wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType);
							break;
						case dot11_BSS_type_independent:
							wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType);
							break;
						default:
							wprintf(L"Other (%lu)\n", pBssEntry->dot11BssType);
							break;
						}
                                
                    wprintf(L"  Number of BSSIDs[%u]:\t %u\n", j, pBssEntry->uNumberOfBssids);	
                    wprintf(L"  Connectable[%u]:\t ", j);
                    if (pBssEntry->bNetworkConnectable)
                        wprintf(L"Yes\n");
                    else 
						{
                        wprintf(L"No\n");
                        wprintf(L"  Not connectable WLAN_REASON_CODE value[%u]:\t %u\n", j, pBssEntry->wlanNotConnectableReason);
						}        
                    wprintf(L"  Number of PHY types supported[%u]:\t %u\n", j, pBssEntry->uNumberOfPhyTypes);

                    if (pBssEntry->wlanSignalQuality == 0)
                        iRSSI = -100;
                    else if (pBssEntry->wlanSignalQuality == 100)   
                        iRSSI = -50;
                    else
                        iRSSI = -100 + (pBssEntry->wlanSignalQuality/2);    
                        
                    wprintf(L"  Signal Quality[%u]:\t %u (RSSI: %i dBm)\n", j, pBssEntry->wlanSignalQuality, iRSSI);
					//Prova con memorizzazione dei MAC
					lMacAddress_TEST.insert(std::make_pair(sMACAddress,iRSSI));
                    if (first_run==true)
					{
						luogo.InsertElement(sMACAddress,iRSSI);
					}
					wprintf(L"  Security Enabled[%u]:\t ", j);
                    if (pBssEntry->bSecurityEnabled)
                        wprintf(L"Yes\n");
                    else
                        wprintf(L"No\n");
         
                    wprintf(L"  Default AuthAlgorithm[%u]: ", j);
                    switch (pBssEntry->dot11DefaultAuthAlgorithm) 
						{
						case DOT11_AUTH_ALGO_80211_OPEN:
							wprintf(L"802.11 Open (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
							break;
						case DOT11_AUTH_ALGO_80211_SHARED_KEY:
							wprintf(L"802.11 Shared (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
							break;
						case DOT11_AUTH_ALGO_WPA:
							wprintf(L"WPA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
							break;
						case DOT11_AUTH_ALGO_WPA_PSK:
							wprintf(L"WPA-PSK (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
							break;
						case DOT11_AUTH_ALGO_WPA_NONE:
							wprintf(L"WPA-None (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
							break;
						case DOT11_AUTH_ALGO_RSNA:
							wprintf(L"RSNA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
							break;
						case DOT11_AUTH_ALGO_RSNA_PSK:
							wprintf(L"RSNA with PSK(%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
							break;
						default:
							wprintf(L"Other (%lu)\n", pBssEntry->dot11DefaultAuthAlgorithm);
							break;
						}
                        
                    wprintf(L"  Default CipherAlgorithm[%u]: ", j);
                    switch (pBssEntry->dot11DefaultCipherAlgorithm) 
						{
						case DOT11_CIPHER_ALGO_NONE:
							wprintf(L"None (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
							break;
						case DOT11_CIPHER_ALGO_WEP40:
							wprintf(L"WEP-40 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
							break;
						case DOT11_CIPHER_ALGO_TKIP:
							wprintf(L"TKIP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
							break;
						case DOT11_CIPHER_ALGO_CCMP:
							wprintf(L"CCMP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
							break;
						case DOT11_CIPHER_ALGO_WEP104:
							wprintf(L"WEP-104 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
							break;
						case DOT11_CIPHER_ALGO_WEP:
							wprintf(L"WEP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
							break;
						default:
							wprintf(L"Other (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
							break;
						}

                    wprintf(L"  Flags[%u]:\t 0x%x", j, pBssEntry->dwFlags);
                    if (pBssEntry->dwFlags) 
						{
                        if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
                            wprintf(L" - Currently connected");
                        if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_HAS_PROFILE)
                            wprintf(L" - Has profile");
						}   
                    wprintf(L"\n");
                    
                    wprintf(L"\n");
					if (pWlanBssList!=NULL)
					{
        WlanFreeMemory(pWlanBssList);	//Libera la zona di memoria preposta alla lista di reti disponibili appena utilizzata
        pWlanBssList = NULL;
		}
                }
            }
        }

    }
    if (pBssList != NULL) 
		{
        WlanFreeMemory(pBssList);	//Libera la zona di memoria preposta alla lista di reti disponibili appena utilizzata
        pBssList = NULL;
		}
	

    if (pIfList != NULL) 
		{
        WlanFreeMemory(pIfList);	//Libera la zona di memoria preposta alla lista di NIC appena utilizzata
        pIfList = NULL;
		}
	
		if (first_run==true)
		{
			first_run=false;
		}
		else
		{
			float error;
			error=luogo.ErrorValue(lMacAddress_TEST);
			wprintf(L"Errore con i dati memorizzati: %f\n\n", error);
		}
		WlanCloseHandle(hClient, NULL);
	system("pause");
	}
	return dwRetVal;
}