Native Wifi API [http://msdn.microsoft.com/en-us/library/ms705969(VS.85).aspx], available since Windows XP can be used to create a Wifi scanner. Attached at the bottom of the page is an excellent translation of these headers as well as a GUI Wifi Scanner, written by RRUZ [Usage] and Architect [GUI]. This short Delphi command line snippet details how to make use of the Native Wifi headers. Compiled: Delphi 2007 Operating System: Windows Vista program DetectWifiUsingDelphi; //by RRUZ {$APPTYPE CONSOLE} uses Windows, SysUtils, nduWlanAPI in 'nduWlanAPI.pas', nduWlanTypes in 'nduWlanTypes.pas'; //You may require the headers at: // http://www.delphibasics.info/home/delphibasicsprojects/wifiscanner function DOT11_AUTH_ALGORITHM_To_String( Dummy :Tndu_DOT11_AUTH_ALGORITHM):String; begin Result:=''; case Dummy of DOT11_AUTH_ALGO_80211_OPEN : Result:= '80211_OPEN'; DOT11_AUTH_ALGO_80211_SHARED_KEY : Result:= '80211_SHARED_KEY'; DOT11_AUTH_ALGO_WPA : Result:= 'WPA'; DOT11_AUTH_ALGO_WPA_PSK : Result:= 'WPA_PSK'; DOT11_AUTH_ALGO_WPA_NONE : Result:= 'WPA_NONE'; DOT11_AUTH_ALGO_RSNA : Result:= 'RSNA'; DOT11_AUTH_ALGO_RSNA_PSK : Result:= 'RSNA_PSK'; DOT11_AUTH_ALGO_IHV_START : Result:= 'IHV_START'; DOT11_AUTH_ALGO_IHV_END : Result:= 'IHV_END'; end; End; function DOT11_CIPHER_ALGORITHM_To_String( Dummy :Tndu_DOT11_CIPHER_ALGORITHM):String; Begin Result:=''; case Dummy of DOT11_CIPHER_ALGO_NONE : Result:= 'NONE'; DOT11_CIPHER_ALGO_WEP40 : Result:= 'WEP40'; DOT11_CIPHER_ALGO_TKIP : Result:= 'TKIP'; DOT11_CIPHER_ALGO_CCMP : Result:= 'CCMP'; DOT11_CIPHER_ALGO_WEP104 : Result:= 'WEP104'; DOT11_CIPHER_ALGO_WPA_USE_GROUP : Result:= 'WPA_USE_GROUP OR RSN_USE_GROUP'; //DOT11_CIPHER_ALGO_RSN_USE_GROUP : Result:= 'RSN_USE_GROUP'; DOT11_CIPHER_ALGO_WEP : Result:= 'WEP'; DOT11_CIPHER_ALGO_IHV_START : Result:= 'IHV_START'; DOT11_CIPHER_ALGO_IHV_END : Result:= 'IHV_END'; end; End; procedure Scan(); const WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES =$00000001; var hClient : THandle; dwVersion : DWORD; ResultInt : DWORD; pInterface : Pndu_WLAN_INTERFACE_INFO_LIST; i : Integer; j : Integer; pAvailableNetworkList: Pndu_WLAN_AVAILABLE_NETWORK_LIST; pInterfaceGuid : PGUID; SDummy : string; begin ResultInt:=WlanOpenHandle(1, nil, @dwVersion, @hClient); if ResultInt<> ERROR_SUCCESS then begin WriteLn('Error Open CLient'+IntToStr(ResultInt)); Exit; end; ResultInt:=WlanEnumInterfaces(hClient, nil, @pInterface); if ResultInt<> ERROR_SUCCESS then begin WriteLn('Error Enum Interfaces '+IntToStr(ResultInt)); exit; end; for i := 0 to pInterface^.dwNumberOfItems - 1 do begin Writeln('Interface ' + pInterface^.InterfaceInfo[i].strInterfaceDescription); WriteLn('GUID ' + GUIDToString(pInterface^.InterfaceInfo[i].InterfaceGuid)); Writeln(''); pInterfaceGuid:= @pInterface^.InterfaceInfo[pInterface^.dwIndex].InterfaceGuid; ResultInt:=WlanGetAvailableNetworkList(hClient,pInterfaceGuid,WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES,nil,pAvailableNetworkList); if ResultInt<> ERROR_SUCCESS then begin WriteLn('Error WlanGetAvailableNetworkList '+IntToStr(ResultInt)); Exit; end; for j := 0 to pAvailableNetworkList^.dwNumberOfItems - 1 do Begin WriteLn(Format('Profile %s',[WideCharToString(pAvailableNetworkList^.Network[j].strProfileName)])); SDummy:=PChar(@pAvailableNetworkList^.Network[j].dot11Ssid.ucSSID); WriteLn(Format('NetworkName %s',[SDummy])); WriteLn(Format('Signal Quality %d ',[pAvailableNetworkList^.Network[j].wlanSignalQuality])+'%'); //SDummy := GetEnumName(TypeInfo(Tndu_DOT11_AUTH_ALGORITHM),integer(pAvailableNetworkList^.Network[j].dot11DefaultAuthAlgorithm)) ; SDummy:=DOT11_AUTH_ALGORITHM_To_String(pAvailableNetworkList^.Network[j].dot11DefaultAuthAlgorithm); WriteLn(Format('Auth Algorithm %s ',[SDummy])); SDummy:=DOT11_CIPHER_ALGORITHM_To_String(pAvailableNetworkList^.Network[j].dot11DefaultCipherAlgorithm); WriteLn(Format('Auth Algorithm %s ',[SDummy])); Writeln(''); End; end; WlanCloseHandle(hClient, nil); end; begin try Scan(); Readln; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end. Only Delphi source code is included in the archive. |
Delphi Basics - Free Delphi Source Code - Ultimate Programming Resource > Delphi Basics Projects >