Detecting Wifi Networks Using Delphi and Native Wifi API

来源:互联网 发布:js选项卡代码理解 编辑:程序博客网 时间:2024/05/22 08:02
{$APPTYPE CONSOLE}
 
uses
  Windows,
  SysUtils,
  nduWlanAPI  in 'nduWlanAPI.pas',
  nduWlanTypesin 'nduWlanTypes.pas';
 
functionDOT11_AUTH_ALGORITHM_To_String( Dummy :Tndu_DOT11_AUTH_ALGORITHM):AnsiString;
begin
    Result:='';
    caseDummy 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;
 
functionDOT11_CIPHER_ALGORITHM_To_String( Dummy :Tndu_DOT11_CIPHER_ALGORITHM):AnsiString;
begin
    Result:='';
    caseDummy 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;
 
procedureScan();
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               :AnsiString;
begin
  ResultInt:=WlanOpenHandle(1,nil, @dwVersion, @hClient);
   try
    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;
 
    fori := 0 to pInterface^.dwNumberOfItems - 1do
    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;
 
          forj := 0 to pAvailableNetworkList^.dwNumberOfItems - 1 do
          Begin
             WriteLn(Format('Profile         %s',[WideCharToString(pAvailableNetworkList^.Network[j].strProfileName)]));
             SDummy:=PAnsiChar(@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;
   finally
    WlanCloseHandle(hClient,nil);
   end;
end;
begin
  try
    Scan();
    Readln;
  except
    onE:Exception do
      Writeln(E.Classname,': ', E.Message);
  end;
end.

ScanWifi Image

0 0
原创粉丝点击