![]() |
Wlan connect
Hallo,
ich würde gerne per Delphi Verbindungen zu Wlan-Netze herstellen. Im Netz habe ich einen Wlan-Scanner gefunden:
Delphi-Quellcode:
Das funktioniert soweit, es werden die vorhandenen Netzwerk angezeigt.
procedure TFORM1.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; l:tlistItem; 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 COMBOBOX1.Items.Add('Interface ' + pInterface^.InterfaceInfo[i].strInterfaceDescription); edit1.Text:=('GUID ' + GUIDToString(pInterface^.InterfaceInfo[i].InterfaceGuid)); 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 l:=listview1.Items.Add; SDummy:=PAnsiChar(@pAvailableNetworkList^.Network[j].dot11Ssid.ucSSID); l.Caption:=(SDummy); l.SubItems.Add(Format('%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); l.SubItems.Add(SDummy); SDummy:=DOT11_CIPHER_ALGORITHM_To_String(pAvailableNetworkList^.Network[j].dot11DefaultCipherAlgorithm); l.SubItems.Add(SDummy); End; end; WlanCloseHandle(hClient, nil); end; Meine Frage ist, wie kann ich jetzt zu einem ausgewählten Netz eine Verbindung herstellen? In einer Unit befindet sich die Funktion WlanConnect.
Delphi-Quellcode:
Weiß jemand, wie ich die Parameter in diese Funktion einsetzen muss?
function WlanConnect(hClientHandle: Handle; const pInterfaceGuid: PGUID;
const pConnectionParameters: Pndu_WLAN_CONNECTION_PARAMETERS; pReserved: PVOID): DWORD; stdcall; Danke. Gruß Stefan |
AW: Wlan connect
Falls dir das weiterhilft - die Doku zu WlanConnect:
![]() |
AW: Wlan connect
Hallo,
vielen Dank erstmal. Gibt es keine Beispiel als Delphi-Code, wie man welche Parameter übergibt? |
AW: Wlan connect
Zitat:
Alle relevanten Informationen liegen doch vor?!? Du musst nur noch als dritten Parameter pConnectionParameters: Pndu_WLAN_CONNECTION_PARAMETERS erzeugen, ausfüllen und übergeben. |
AW: Wlan connect
Hallo,
den Code habe ich nicht so richtig verstanden?!? Mit Zeigern usw. kenne ich mich nicht so gut aus. Wie bau ich den dritten Parameter zusammen? Ein Beispiel-Code wäre super. Danke. Stefan |
AW: Wlan connect
So hab ich es bis jetzt gemacht:
Delphi-Quellcode:
Funktioniert leider nicht.
var PA : Pndu_WLAN_CONNECTION_PARAMETERS;
... Pa.strProfile := 'Test'; Pa.wlanConnectionMode := Wlan_Connection_Mode_profile; Pa.pDot11Ssid := @pAvailableNetworkList^.Network[0].dot11Ssid; Pa.pDesiredBssidList := @pAvailableNetworkList^.Network[0].dot11BssType; Pa.dwFlags := Null; ResultInt:= WlanConnect(hClient, @pInterface^.InterfaceInfo[0].InterfaceGuid, PA , nil); |
AW: Wlan connect
Zitat:
Was genau funktioniert nicht? |
AW: Wlan connect
Er hat vergessen den Speicher für den Pointer zu reservieren.
Aber das hat ihm auch der Compiler gesagt, denn diese Variable ist nicht initialisiert. PS: Alternativ kann man auch statt des Pointer-Typs + New direkt den Record-Typen verwenden. |
AW: Wlan connect
Ich klinke mich hier mal ein - weil gleiches Prob u. a.
![]() ![]() Problemstellung: Ich habe hier u.a. ein(ige) ESP8266-WiFi-Module, welche als Acecess-Point laufen und nebst Daten-Fütterung auch wieder Daten von sich geben. Tempörär nach Bedarf .... D.h., ich möchte - erkennen, ob jeweile Module "online" sind (wiederholter Scan bei Bedarf - klappt soweit) - mich mit dem Schläppi (vom eingeloggten WLAN) nach Wahl damit verbinden (TO DO !) - Daten "duch die Luft" austauschen (das klappt auch wie die Wutz) und - wenn fettich wieder automatisch mit dem vorherige "Stamm-WLAN" verbinden (TO DO !) ... damit das umständliche aus- und Einloggen (für unbedarfte User meiner APP) entfällt (und nicht nur für mich automatisch schneller geht) Test betreff "Connect" (& logo DisConnect) steht gleich noch aus .... Dazu jedoch noch die Frage vorher: - Wie erkenne ich, mit welchem WiFi ich bereits (aktuell automatisch zum Home-Router) verbunden bin ? (und wie ich mir das merken kann/muss für spateren re-connect) - Ich hab am Schläppi noch einen Fritz!-WLAN-Stick für alternative Verbindung (ist schneller als der eingebaute Ahteros) -> Kann ich die parallel nutzen ohne uzuschalten ? Mega Dank für hilfreiche Tipps/Links. |
AW: Wlan connect
Viel kann ich nich helfen, aber ja, man kann sich über mehrere WLAN-Module gleichzeitig zu mehreren WLAN-Routern/Hotspots verbinden.
Also Windows kann das probemlos. |
AW: Wlan connect
Danke dir für die "Anteilnahme" :-D, aber:
Zur weiteren Erläuterung: Das Auslesen besagter ESP-Module soll hier (zwingend) auch noch mit Schläppi-Oldies erfolgen können/müssen, welche noch mit XP arbeiten (WICHTIG - kein Hardware Overkill erwünscht !) D.h.: Ich sitze hier grade z.B. an so einem Teil (ACER Travelmate 2450, ~ 12 Jahre alt - aber topfit, hardware upgraded mit T7200 DualCore, 4GB Ram, SSD), welches definitv mangels erhätlicher Treiber auf Win7+ NICHT mehr (richtig) läuft. .... ich bekomme es auf diesem "Apparat" leider mit XP nicht geregelt, das interne WLAN (Atheros-Chip) mit externem Fritz!-Stick parallel zu nutzen - es geht immer nur ein Adapter aktiv. Deswegen wichtig: Erkennen, welches WLAN aktiv ist, aktiv beenden & ESP connecten, ESP wieder dis_connecten und vorheriges WLAN wieder re-connecten. Sehr nervig ist (nicht nur hier !?): Ein automatischer "Re-connet" seitens XP findet offensichtlich wohl nach dem stärksten Signal statt. Das ESP-Test-Modul liegt gleich neben dem Schläppi .... und komm immer zuerst, solange das Teil noch aktiv/unter Strom ist. .... eben mal schnell was im WWW nachlesen: .... iss nich ! Erst mal wieder zum Router manuell umschalten. Würde mich sehr freuen, wenn ich das irgendwie geregelt beommen kann. |
AW: Wlan connect
Und wenn du im Windows für die ESP das Autoconnect deaktivierst, dann sollten die doch nicht mehr Autoconnected werden? :stupid:
Winziges Problemchen beim Reconnect zum ursprünglichen WLAN, am Ende: Wenn das nicht autoconnected war, dann weißt du natürlich den WLAN-Schlüssel/Passwort nicht mehr. |
AW: Wlan connect
Autoconnect ist schon praktisch ....
Wenn ich denn wüsste, wie man das (temporär) abschaltet ? Per Delphi ? Anderer Sache. ... ich bin da nicht so wirklich der WLAN/WIFI-Held. Das Prob zum "zurückschalten" ist nicht Auto-Connect, sondern das was verbunden war. Ob Auto oder manuell oder nix verbunden ... Es muss also egal sein, wo ich mich befinde und welche Spots/Router grade greifbar sind, bzw. mit "was/wem" ich verbunden bin (ode zuletzt war). "Meine" AP's" kenne ich alle beim Namen/Typ (SSID/PW) und wähle diese bei Vorhandensein (nach Scan) explizit aus. Auch diese können an allen Orten vorhanden sein. Mitten in einen Wust von Spots (auf nem Airport, mitten in Berlin oder sonstwo) oder auch mitten in der Pampa ohne jegliche (externe) WWW-Abindung/Router. ... es sind alles Access-Points .... mit eigener IP. Ach JA: .... es gäbe dann ggf. auch noch mehrere "Module" abzufragen - d.h. Ur-Netz merken, alle Module "durchverbinden", zurück zum eigentlichen Netz (if available ...) |
AW: Wlan connect
Vorab-Info:
:-D 8-) .... und sie dreht sich doch ! Nach stundenlanger Sucherei, Leserei und Probierei rückt mir XP endich die SSID (sogar 2 unterschiedliche an 2 Adaptern) raus. Das funktionier tadellos mit der WLAN-API. Nur gewusst wie und dieses C-Kauderwelsch richtig "gelesen" ... D.h., nun weiß ich, mit welchem WIFI ich verbunden bin (war) - fehlt nur noch die Umsetzung zur passenden Um- und Rückschaltung mittels "WlanConnect" und fettich ist die Laube. Um den geneigten Interressenten auch in den Genuss dieser Funktionalität, muss ich allerdings mein Code-Gerümpel etwas aufpeppen und dokumentieren - also bitte etwas Geduld. |
AW: Wlan connect
.... Geduld bitte - gestaltet sich aufwendiger als gedacht.
Langsam aber sicher "formt" sich aber was. Ich will ja was halbwegs "schick brauchbares" abliefern .... |
AW: Wlan connect
Liste der Anhänge anzeigen (Anzahl: 1)
:bounce1: :witch: :hello:
GELÖST - ALLES FUNZT ... auch CONNECT. ... will nur noch "mal eben schnell" NOTIFY einbauen, dann gibbet heute noch nen DEMO-File. :corky: EDIT: .... auch das Notify scheint mich ärgern zu wollen. :roll: Deshalb hier est mal ne EXE vorab zum testen. Hier erfolgreich unter XP. Mal schauen ob alle geneigten Interressenten meine Logig verstehen :-D |
AW: Wlan connect
.... und wieder ein Stückchen glücklicher: Auch das Notifing funzt nun !
Wo fange ch mal an ? Am besten mit der eigendlichen Frage: WLAN_CONNECT Es ist ganz offensichtlich A) .... ein Fehler in der WLAN-API für Delphi, die es div. im WEB (mit gleichem Inhalt zu laden gibt. Ich habe ![]() Es ist ein Fehler in der LIB "nduWlanAPI.pas" ! Falsche Parameterdefinition .... so isse's richtig und funzt:
Code:
.... ein simples "W" fehlte.
type
Pndu_WLAN_CONNECTION_PARAMETERS = ^Tndu_WLAN_CONNECTION_PARAMETERS; Tndu_WLAN_CONNECTION_PARAMETERS = record wlanConnectionMode: Tndu_WLAN_CONNECTION_MODE; strProfile: LPCWSTR; // changed by TERWI - remind missing "W" for pointer ! // strProfile: LPCTSTR; // ORIGINAL declared by author pDot11Ssid: Pndu_DOT11_SSID; pDesiredBssidList: Pndu_DOT11_BSSID_LIST; dot11BssType: Tndu_DOT11_BSS_TYPE; dwFlags: DWORD; end; B) .... und die Frage der richtigen Initialisierung. Meine Routine sieht so aus:
Code:
FhClient und FhClient sind globale var. Dito FpIFDATA, worin Daten aus dem aktuell connecteten Interface/Adapter gehalten werden.
function TMain.WLAN_Connect(ConLast : boolean) : HRESULT;
var ConPrms : Tndu_WLAN_CONNECTION_PARAMETERS; Name : WideString; begin if NOT Assigned(FpIFDATA) then exit; if NOT Assigned(FpNWDATA) then exit; if NOT FIsClient then exit; if ConLast then Name := WideString(FpIFDATA.actProfile) else Name := WideString(FpNWDATA.actProfile); ConPrms.wlanConnectionMode := wlan_connection_mode_profile; ConPrms.strProfile := PWChar(Name); ConPrms.pDot11Ssid := NIL; // Windows XP: pDesiredBssidList member must be NULL. ConPrms.pDesiredBssidList := NIL; ConPrms.dot11BssType := dot11_BSS_type_any; // Windows XP: dwFlags must be set to 0 ConPrms.dwFlags := 0; result := WlanConnect(FhClient, @FGuid, @ConPrms, nil); if result <> ERROR_SUCCESS then Memo.Lines.Add('CONNECT - FAILED: ' + IntToStr(result) + ' - ' + GetErrString(result)) else Memo.Lines.Add('CONNECT - OK ... wait for notify !`'); end; Die Connection Params sind für XP-kompatiblen ausgelegt (mode_profile). Der Parameter "ConLast" besagt hier, das ich entweder die letzte Verbindung des Adapters oder eine neu gewählte nehme. Hie wird nur ein String für den Profilnamen (der gültig sein muss !) passend zugewiesen. Funzt nun tadellos. Später mehr. |
AW: Wlan connect
Ein Profil-XML auslesen wollte auch erst nicht klappen.
Hier war das Problem, das der Param für den zurückzugebenden String A) grundsätzlich ein WideString B) und dann nochmals konvertiert als PWChar (wie bei div. Aufrufen aus der WLAN-API !) übergeben werden muss. Also so in etwa:
Code:
Auch hier wieder:
function TMain.WLAN_GetProfileInfo() : HRESULT;
var Name : WideString; pXML : pwidechar; Flags : DWORD; GA : DWORD; begin if NOT Assigned(FpIFDATA) then exit; if NOT Assigned(FpNWDATA) then exit; if NOT FIsClient then exit; Name := WideString(FpNWDATA.actProfile); pXML := NIL; Flags := 0; GA := 0; // ------------------------------------------------------------- // ATTENTION: var to pstrProfileXml MUST be @pXML - NOT pXML !!! // ------------------------------------------------------------- result := WlanGetProfile(FhClient, // hClientHandle [in] @FGuid, // pInterfaceGuid [in] PWChar(Name), NIL, // pReserved [in] @pXML, // pstrProfileXml [out] @Flags, // pdwFlags [in, out, optional] @GA); // pdwGrantedAccess [out, optional] if result <> ERROR_SUCCESS then Memo.Lines.Add('GETPROFILEINFO - FAILED: ' + IntToStr(result) + ' - ' + GetErrString(result)) else begin Memo.Lines.Add('GETPROFILEINFO - XML: ' + pXML); end; if Assigned(pXML) then WlanFreeMemory(pXML); end; FhClient und FhClient sind globale var. Dito FpIFDATA (Interface) & FpNWDATA( Network), worin Daten aus dem aktuell connecteten Interface/Adapter, bzw. ausgewähltem (verfügbarem) Netzwerk gehalten werden. Die Flags und GA sind für XP-kompatiblen ausgelegt. |
AW: Wlan connect
Liste der Anhänge anzeigen (Anzahl: 1)
Nun zum WLANNotify-ing:
Da haben sich vor gut 10 Jahren schon div. Leute ![]() Nach eingehendem Studium div. MSDN-Seiten zu dem Thema las ich sinngemäß: ".... WlanRegisterNotification funzt so lange, wie der übergebene Handle gültig ist ...." Aha, also: Handle öffnen, WlanRegisterNotification aufrufen und dann entsprechend andere Funktionen hinterher ... und am Ende der selbstgemachten Routine gleich wieder den Handle (ordnungsgemäß !) freigeben. Da wundert's nicht, wenn nie ein (zeitlich später folgendes) Ereignis NIEMALS und der Notify-Routine auftaucht. Warten auf Godot .... Lösung: Einfach beim Programmstart global nur einen THandle (! - hier FcHandle) holen und im gesamten Programm verwenden. Funzt tadellos hier.
Code:
Übergeben und gesetzt wird eine globale var FhClient.
function TMain.GetWlanHandle(var Handle : THandle) : boolean;
var res : HRESULT; Version : DWORD; begin result := false; Handle := 0; res := WlanOpenHandle(2, nil, @Version, @Handle); // "2" for version also XP - autom. negotiation if res <> ERROR_SUCCESS then begin Memo.Lines.Add('GetWlanHandle - FAILED: ' + IntToStr(res) + ' - ' + GetErrString(res)); exit; // ... no handle ? no function ... end; Memo.Lines.Add('GetWlanHandle - negotiate Version: ' + IntToStr(Version)); result:= true; end; Die Registrierug ist auch recht unspektakulär:
Code:
Initialisiert wird das so:
// -----------------------------------------------------------------------------
function TMain.Wlan_RegisterNotification(Mode : boolean) : HRESULT; var Notify : DWORD; pProc : pointer; begin if NOT FIsClient then exit; // for safety ! if Mode then begin Notify := NDU_WLAN_NOTIFICATION_SOURCE_ALL; //_ACM pProc := @WLanNotifyProc; end else begin Notify := NDU_WLAN_NOTIFICATION_SOURCE_NONE; pProc := NIL; end; // check negotiatedVersion if needed result := WlanRegisterNotification(FhClient, // hClientHandle [in] NDU_WLAN_NOTIFICATION_SOURCE_ACM, // dwNotifSource [in] //NDU_WLAN_NOTIFICATION_SOURCE_ALL, true, // bIgnoreDuplicate [in], ignored in XP pProc, // funcCallback [in, optional] nil, // pCallbackContext [in, optional], always NIL nil, // pReserved [in], always NIL @FScanCompleteEvent //pdwPrevNotifSource [out, optional] ); if result <> ERROR_SUCCESS then begin Memo.Lines.Add('RegisterNotification - FAILED: ' + IntToStr(result)); end else Memo.Lines.Add('RegisterNotification - OK !'); end;
Code:
Und die Notify-Routine geht etwa so:
procedure TMain.FormCreate(Sender: TObject);
var res : HRESULT; prevSource : pointer; // Register begin // SetUp Common Memo.Clear; FIF_List := TList.Create; // remind Interfaces FIF_selected := -1; // nothing selected FNW_List := TList.Create; // remind Networks FNW_selected := -1; // nothing selected FIsClient := GetWlanHandle(FhClient);; if FIsClient then Wlan_RegisterNotification(true); .... end; procedure TMain.FormDestroy(Sender: TObject); begin if FIsClient then Wlan_RegisterNotification(false); ..... end;
Code:
procedure WLanNotifyProc(pNotifyData : Pndu_WLAN_NOTIFICATION_DATA;
pContext : pointer); stdcall; var s : string; begin if pNotifyData^.NotificationSource = NDU_WLAN_NOTIFICATION_SOURCE_ACM then begin case Tndu_WLAN_NOTIFICATION_ACM(pNotifyData.NotificationCode) of .... wlan_notification_acm_scan_complete : s := 'scan complete'; wlan_notification_acm_scan_fail : s := 'scan fail'; wlan_notification_acm_connection_start : s := 'connection start'; wlan_notification_acm_connection_complete : s := 'connection complete'; wlan_notification_acm_connection_attempt_fail : s := 'connection attempt'; .... wlan_notification_acm_disconnecting : s := 'disconnecting'; wlan_notification_acm_disconnected : s := 'disconnected'; .... end; Main.Memo.Lines.Add('NOTIFY: ' + IntToStr(pNotifyData^.NotificationCode) + ' - ' + s); end; if Assigned(pNotifyData) then WlanFreeMemory(pNotifyData); end; |
AW: Wlan connect
Donnerwetter: Schon 1058 Hits in ein paar Tagen !
Scheint ja wohl reges interresse da zu sein .... aber keine Kommentare, Fragen, weitere Hinweise oder gar ein kleines Danke/Lob :!: Finde ich sehr erstaunlich - insbesondere weil ich bei meinen umfangreichen Recherchen in den letzten Tagen feststellen musste, dass es hier mit Info (insbesondere in Sachen Delphi) nicht grade reichlich beschert ist. Ein paar "Basis-Libs" (in C, Delphi i.d.R. mit den gleichen Fehlern) gibt es und logo auch ein paar fertige VCLs - die kosten aber alle (nicht grade wenig) Knete. Haben Delphianer nix mit WLAN am Hut ? :gruebel: Also weiter mit Selbermachen hier :coder: Bin aktuell dabei, das ganze "WLAN-Gerümpel" in eine Klasse zu stopfen und ein wenig hilfreiche Funktionen drumherum zu wrappen. Elementare Dinge funzen schon prima :dancer: - es sind noch (unendlich viele ?) weitere, nützliche FUNCs to do. Falls auch jemand anderes mal gelegentlichen (oder dringenden) Bedarf an so einer Klasse hat ... einfach mal hier posten. |
AW: Wlan connect
Geplant wäre ein Projektchen, aber das steht in meiner Liste recht weit am hinteren Ende (für die nächsten 1-2 Jahre).
|
AW: Wlan connect
Na fein ! .... wenigstens mal eine Antwort.
Dann könntest du (nicht nur du :roll: ) ja z.b. u.a. (schon) mal ein paar Gedanken äussern, was "man" sich so an Funktionaliät einer entsprechenden Klasse vorstell .... :cyclops: .... bastel ich alles gerne mit rein ... wenn es [mir] keine Umstände macht. 8-) |
AW: Wlan connect
Ich habe das ganze unter Delhi XE4 und Windows 10 getestet. Geht so nicht :(.
Hat einer einen Tipp wie das unter Delphi XE4 und Windows 10 geht? Vorab vielen Dank! |
AW: Wlan connect
Tja. "Geht so nicht", ist eine etwas magere Fehlerbeschreibung, findest du nicht auch? Oder was soll TERWI damit jetzt anfangen? :roll:
|
AW: Wlan connect
Hallo,
mich würde unter XE4 mal die Anzahl der Compiler-Warnungen interessieren (Stichwort Unicode). Ach, und ich lese hier nur so mit, habe aber mit WLAN-Programmierung auf Arbeit und zu Hause keine Projekte in Planung. |
AW: Wlan connect
Zitat:
|
AW: Wlan connect
Zitat:
...zumindest bei mir Gruß, Toni |
AW: Wlan connect
Zitat:
|
AW: Wlan connect
Oooh, es tut sich was !
Ich hatte kurz mal einen Break eingelegt und bin nun wieder etwas weiter. O.g. Tool funzt(e) nur, wenn bereits ein entsprechendes Profil auf dem Rechner zum Verbinden mit dem jeweiligen Netz vorhanden war. Aber man will/muss ja auch mal was neues connecten ... Ich bite zu bedenken, das hier alles auf XP getestet wurde ! Hier gibts es einen Satz Funktionen, der z.T in der Funktionalität etwas eingeschränkt ist. Wenn ich Frollein MSDN richtig verstanden habe, müssen alle diese Funktionen aber auch unter Vista/Win7 ++ laufen. 1.) Prob war immer noch: "Temporary Profiles" funzen NICHT unter XP !!! Man muss sich dazu selbst ein XML-Profil basteln und mit WLanSetProfile speichern, danach läuft ein WLANConnect mit dem neuen Profil einwandfrei. Ich hatte das zunächst aber nur mit einen ESP8266-Modul als offener AP ohne Passwort (!) geprüft. 2. Prob: .... nun mit PW, bzw. (wieder-) Einloggen in mein Heim-Netz: Permanente Meckereien, das etwas mit dem Profil nicht stimmen soll. MSDN kreuz und quer gelesen. Angeblich soll WinnDoof ja in einem Fensterchen (wie beim Standard-Login) nach dm PW fragen - tut's aber nicht. Und wie in div Beispielen angebenen, erhalte ich immer Fehler im Reason-Code zurück. Die Lösung: Will man sich in ein verschlüssteltes neu einloggen, braucht man logo den KEY - den muss man (unter XP ?) vor dem connect-Versuch selbst abfragen und in's Profil einbauen. Dieser gehört in der Section <sharedkey> in die Zeile <keyMaterial> - im Klatext, case sensitiv ! Die Zeile <protected> muss 'false' lauten. SEHR WICHTIG ist die Zeile <keyType>. Mier muss beim Erzeugen ZWINGEND "passPhrase" stehen - NICHT "network" ! WinnDoof ändert das XML-Profil automatisch nach erfolgreichem Login um und setzt <keyType> auf network und ersetzt <keyType> durch einen gekrypteten 64-Zeichen-HEX-String. ..... und dann fluppt das auch mit verschlüsselten Netzen. Wenn ich mit dem Code-Entrümpeln fertig bin, gibts auch wieder einige Code-Schnipsel. PS: Ich habe zwischenzeitlich die ganze WLAN-API durchforstet, hier und da ein paar "Käfer" rausgeworfen und auf den letzten Stand (lt. MSDN) aktualisiert. Mit Ausnahme der noch ausstehenden Funktionen für "Hosted Networks" ist so weit alles drin. Dazu hab ich noch einen Wrapper als Klasse drumherumgebastelt, der (erst mal) die wichtigsten Funktionen kapselt und das Handling (sehr) vereinfacht. Ein bischen Geduld noch, dann kommt was nutzliches. PS-2: Das gepackte File ist definitiv ein "RAR", kein ZIP. Bitte WinRar zum entpacken benutzen. |
AW: Wlan connect
Und wie kann ich mich dann letztendlich mit dem verschlüsselten wlan verbinden, ich kenne doch schließlich den Netzwerkschlüssel nicht. Lässt der sich denn wirklich soooo mir nix dir nix auslesen? Immerhin wird der ja abgefragt, wenn ich irgendeinen fremden Router (Accesspoint) auswähle und mich mit dem Internet verbinden will.
Das soll funktionieren???? |
AW: Wlan connect
:-D Scherzbold. Wie ich oben schrieb:
Zitat:
Bedenke: Das eigentliche Passwort (hier die s. g. Pass-Phrase) wird nur einmal (quasi im Klartext) an das Netzwerk gesendet und dann von dort kommend als "KeyMaterial" im eigenen Rechner (bei TKIP oder AES Verschlüsselung) als 64-Zeichen-HEX-String gespeichert Eine Möglichkeit gäbe es, wenn .... man einen Rechner hat, der bereits eine Verbindung zu entsprechendem Netz aufgebaut hat(te). Dort könnte man das entsprechende Profil auslesen, sichern und auf dem eigenen Rechner wieder mit WLANSetProfil speichern. Vorausgesetzt man hat Zugriff auf eben den Rechner. 8-) Allerdings sind viele (öffentliche) AP's (z.B. hier bei mir von Vodafone oder Telekom) u. a. in Hotels sind i.d.R. als "OPEN" ohne Key deklariert. Da kann man sich problemlos einloggen - allerdings erfolgt dort Systemintern eine User- und PW-Abfrage, so bald man in's WWW möchte. |
AW: Wlan connect
Für das Auslesen der WLAN-Keys auf einem Computer gibt es
WirelessKeyView.exe. ![]() |
AW: Wlan connect
:-D .... das kann mein kleines Tool mittlerweile auch.
Wie ich zuvor schrieb: Profiles auslesen, kopieren, speichern, anwenden. Genauso stehts auch beim Tool von NirSoft. |
AW: Wlan connect
.... wieder ein paar Tage rum.
Funktioniert so weit so gut mit XP, aber bei manchen Dingen (AutoScan, Interface- & Netzwerk-Update, u.a) is das doch eher ne Krücke, im Pull-Modus per Timer zu werkeln. Und eine wichtige Dinge kann XP gar nicht ... War doch sehr neugierig, was unter WIN7 noch so alles geht und hab mir (endlich :roll:) ne Win7 Kiste gebastelt, auf der nun auch nicht mehr Delphi 7 sondern 2007 (nicht RAD) dudelt. Erstaunlicherweise lief der Code ohne zu meckern durch - nur ein paar Bugs in der Callback-Routine. Nun heisst es also: Noch einige Funktionen auf- und einblasen, damit's noch praktikabler wird. Ich werde euch zeitnah das kleine Projekt vorstellen. |
AW: Wlan connect
Doch ein Prob mit WIN7 aufgetaucht:
In diesem Schleppi werkelt ein Atheros WLan-Modul. Zusätzlich habe ich noch einen FritzWlanStick N angesteckt. Beide Adapter werden unter XP/Win7 korrekt erkannt, frage ich jedoch die verfügbaren Netzwerke mit WlanGetAvailableNetworkList je Adapter abab, klappt das bei XP einwandfrei - nur unter WIN7 bekomme ich beim Fritz den Fehler 50 / NOT SUPPORTED (Fehler ist im MSDN nicht gelistet !). Netzwerkliste ist leer, bzw. Zeiger darauf NIL. Es ist auch egal, ob ich als Flags 0, 1, 2 oder 3 übergebe. Richtige GUID ist es auch. ??? Ganz offenichtlich scheint der Stick jedoch zu funktionieren. Schalte ich den Atheros ab (was mein Proggie 1A erkennt), habe ich laut System eine Verbindung mit 300 MBit - die auch funktioniert. Also keine Prob betreff Treiber oder Installation. Hat jemand eine Idee, was da inne Uhr ist ? Kann man das irgendwie anders auslesen ? Irgendwelche Tricks erforderlich ? |
AW: Wlan connect
Hallo Terwi,
da hast Du ja viel Arbeit reingesteckt, Respekt! Könntest Du dein komplette Quelltext hier mal reinstellen? Ich komm aktuell da auch nicht richtig weiter, wie hast Du die globalen Variablen definiert? (FpIFDATA, FpNWDATA) Danke. Stefan |
AW: Wlan connect
Räume grade noch mal den Code auf, damit es übersichtlicher / verständlicher wird und schreibe noch entsprechende Memos rein.
Wenn fertig (hoffentlich zeitig in ein paar Tagen), gibt's einen neuen Thread "WLAN-API" - hier wirds zum Thema etwas unübersichtlich. ... mit aktualisierter Demo für Vista++. Die XP-Kompatibilität habe ich rausgeworfen, weil Funktionalität (insbesondere bei der Notification vom OS) unter XP doch extrem mager ist und alles nur verkompliziert. Bitte ein wenig Geduld. Zur Info zum Neugierig machen vorab: Die Demo und API bestehen aus folgenden Units: - WLAN_ADMIN (die Demo selbst, recht kurz & klein - aber sehr effektiv) - WLAN_WRAP (eine Klasse als Wrapper um die API mit Hilfsfunktionen) - WLAN_API (das Interface zur DLL mit nativen Funktionen) - WLAN_Strings (div. "Klartexte" zur div. Funktionen, Ergebnissen, Enumerationen, usw.) - WLAN_Password (eine interne Form zur Passwort-Abfrage) - WLAN_Profile (eine interne Form zur Bearbeitung von Verbindungs-Profilen) - WLAN_Info_IF (eine interne Form mit Infos zum Adapter/Interface) - WLAN_Info_NW (eine interne Form mit Infos zur aktuellen Verbindung am aktuellen Interface) |
AW: Wlan connect
Hier geht's weiter:
![]() ![]() |
AW: Wlan connect
|
AW: Wlan connect
THX :hi:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz