![]() |
TCPServer Session/Eindeutige ID ermitteln
Hallo,
erst mal Frohen 1. Advent. Da ich nun fast durch bin fehlt mir nur eine einzige Sache. Ich weiß nicht wie ich beim IdTCPServer beim ersten Connecten an eine Eindeutige ID der Session komme. Ich habe einen IOHandler zugewiesen. Kann man die vielleicht dort finden? Ich habe nun innerhalb der letzten Tage das Internet rauf und runter durchsucht. Leider finde ich nix. Vielleicht suche ich ja auch falsch. Vielen vielen Dank im Voraus |
AW: TCPServer Session/Eindeutige ID ermitteln
Huhu,
tut mir leid wenn ich mal *pushe* Aber ich habe nun mal versucht das besser zu erklären.
Code:
In #1 möchte ich eine Eindeutige ID sie Solange hält bis die Session nach xxx Sekunden gekillt wird.
+-------------+ +-------------+ +-------------+
| | | | | | ---User 1-----| IdTCPServer |--------| IdTCPServer |---Wenn ID Richtig----| |------Sonstwohin----- ---User 2-----| OnConnect |--------| OnExecute |---Wenn ID Richtig----|Weiterleitung|------Sonstwohin----- ---User 3-----| |--------| |---Wenn ID Richtig----| |------Sonstwohin----- | 1 | | 2 | | 3 | +-------------+ +----+-+-+----+ +-------------+ | | | | | +---Wenn Keine ID=Abbruch | +-----Wenn Keine ID=Abbruch |+------Wenn Keine ID=Abbruch In #2 Wird wie in diesem Post beschrieben Weitergeleitet wenn alles OK ist. #2-3 ist ![]() Es würde klappen wenn das kein Browser wäre der Weitergeleitet wird. Aber z.b. der IE baut mehrere Verbindungen auf und wieder ab. Und genau da komme ich ins "Schleudern". Mache ist das mit nur einem Browser, klappt es. Gehe ich hin und merke mir die PeerIP klappt es auch von mehreren PCs aus. Leider kann ich nicht nach der IP gehen. Die könnte doppelt sein. Ich habe gestern den ganzen Tag nach einer Lösung gesucht. Leider finde ich rein gar nichts zu meinem Problem. Geht das nicht? Muss man das anders lösen? Oder kann man ein Cookie einsetzen? Wenn ja wie? Darüber habe ich auch nichts gefunden. Oder muss ich einen IdHTTPServer nehmen? Dort habe ich eine SessionID gefunden. Aber ich wüsste nicht wie ich die Pakete über IdTcpServer weiterleiten kann. Vielen dank im Voraus |
AW: TCPServer Session/Eindeutige ID ermitteln
Hallo,
Du kannst eine eindeutige ID bereits im "OnConnect Ereignis" des Server abfragen:
Delphi-Quellcode:
Für jede Connection wird immer ein neues Handle vergeben und bleibt dies auch bis zum Disconnect.
procedure TCCService.IdTCPServer1Connect(AContext: TIdContext);
var BindingID: int64; begin BindingID:=AContext.Binding.Handle; // Das Handle ist für jede Connection immer eindeutig! end; . |
AW: TCPServer Session/Eindeutige ID ermitteln
.. auch sollte eine Client Verbindung durch die IP-Adresse und Port eindeutig identifizierbar sein.
AContext.Connection.Socket.Binding.PeerIp bzw. .PeerPort Grüße Klaus |
AW: TCPServer Session/Eindeutige ID ermitteln
Hi,
vielen dank für die Antworten. Leider klappt es so nicht. Das Problem beim OnConnect ist, das sich, obwohl ich vom gleichen Rechner komme der Port ändert. Der wird immer einen Hochgezählt. Das mit dem Handle ist schon eine gute Idee. Aber wie gesagt, der Browser macht mehr als eine Verbindung auf und zu während er eine Seite lädt. Da geht mir dann das Handle leider immer Verloren. Ich habe schon versucht AContext.Connection.Tag zu missbrauchen. Aber das wird leider auch auf null gesetzt wenn der Browser während dem Laden eine zusätzliche Verbindung aufbaut. Und das ist mein Problem. Wenn er während dem Laden eine neue Verbindung aufbaut "kenne" ich den nicht mehr. Würde das alles Seriell laufen, wäre das alles kein Thema. Aber so weiß ich nun nach einer Woche suchen, hier zig Threads aufmachen (was ich eigentlich nicht möchte) wirklich nicht mehr weiter. |
AW: TCPServer Session/Eindeutige ID ermitteln
Hmm..
Ich glaube, dass dies auf Basis von TCPClient/TCPServer nur möglich ist, wenn beide ein aufgesetztes Protokoll verwenden. Hier mal (schnell überflogen) das Prinzip bei HTTP: ![]() Ohne serverseitige Generierung einer SessionID, welche der Client bei jeder Anfrage mitsendet, wird das wohl nicht klappen. |
AW: TCPServer Session/Eindeutige ID ermitteln
Hi,
also müsste ich es "nur" hinbekommen das ich im OnConnect eine ID erzeuge und dann dem Browser eine URL zurück gebe die z.b. so aussieht: Er Connected mit ![]() ![]() Na das wäre ja geil wenn man das mit dem TcpServer hinbekommt. Allerdings kennt der TcpServer ja keinerlei Protokoll. Wie könnte man das umsetzen? Hat da vielleicht einer eine Idee? Ich habe im Moment ein Brett vorm Kopf. Ich habe soviel gesucht das ich im Moment nicht mehr weiß wo oben und unten ist :( Erst mal vielen dank für die Anregungen. |
AW: TCPServer Session/Eindeutige ID ermitteln
Zitat:
...:cat:... |
AW: TCPServer Session/Eindeutige ID ermitteln
Ich habe leider gar kein Protokoll. Da ich nach der Authentifizierung alles 1:1 weitergeben muss. Das ist die Schleife die ich im 2. Post verlinkt habe.
|
AW: TCPServer Session/Eindeutige ID ermitteln
Wenn Du alles 1:1 weiter geben musst, dann wird es so gut wie unmöglich. Ansonsten könntest Du via Header-Änderungen einen Cookie setzen und diesen später wieder auswerten.
...:cat:... |
AW: TCPServer Session/Eindeutige ID ermitteln
Was du versuchst ist ohne einen extra Protokoll-Layer leider nicht zuverlässig möglich. Eventuell könntest du SOCKS verwenden bzw. darauf aufbauen. Entsprechende Komponenten dafür haben die Indys beiliegen und eigentlich jeder Browser unterstützt das Protokoll. Mit Tools wie "Proxyfier" kann der Support sogar für beliebige Anwendungen nachgerüstet werden.
|
AW: TCPServer Session/Eindeutige ID ermitteln
Hallo,
die TIdHTTPServer Klasse enthält ein Property "SessionList" das als Container für TIDHTTPSession Instancen dient. TIDHTTPSession enthält ein Property "SessionID". Ich habe mich jetzt nicht näher damit beschäftigt, aber vielleicht kannst Du damit irgendwie arbeiten. |
AW: TCPServer Session/Eindeutige ID ermitteln
Zitat:
Das klappt auch alles wunderbar. Aber ich muss über eine eindeutige ID gehen. Gibt nichts womit ich im OnConnect, wie eben von HolgerX beschrieben, irgendwas an den Browser übergeben kann? Und lasse ihn dann ins OnExecute springen. Wenn er wieder über OnConnect kommt müsste der Browser die ID die ich ihm geben habe ja wieder mitbringen und ich kann ihn eindeutig zuordnen. Gibt es eventuell irgendwas was ich in das Onconnect einbauen kann, und er mit diesen Parameter setzt bzw. holt? Oder müsste ich das HTML von Hand zerpflücken eine Antwort mit der ID geben und dann ins Execute laufen lassen? Ich denke mal das es sehr aufwendig ist, oder? Nachtrag: Es müsste eine Komponente sein die ich auch in Codetyphon wieder finde. Das soll später auf einem Unix-System laufen. Noch ein Nachtrag: Es reicht im Grunde auch wenn es nur auf Delphi läuft. Hauptsache ich komme der Sache näher. |
AW: TCPServer Session/Eindeutige ID ermitteln
TCP alleine gibt das nicht her. Selbst wenn irgendwo ne Sessionliste existiert, basiert die auf PeerIp und Port.
Wenn du im Connect schon weitere Kommunikation Blocken willst wirst du keine andere Möglichkeit haben. Im Execute kannst du natürlich z.b. ne erst PW/User zum Server schreiben, Dort verifizieren und dann ID zum Client schreiben. Aufm Server noch nen Timeout hinterlegen und beim nächsten mal mit der ID vergleichen, die der Client jetzt immer schickt... TIdContext müsste ausserdem ein Data Property haben, dem du z.b. ein Objekt zuordnen kannst. |
AW: TCPServer Session/Eindeutige ID ermitteln
Hi,
ich bin immer noch da dran. Also mit TIdContext.Data habe ich es auch schon versucht. Das macht aber auch den Disconnect/Connect vom Browser nicht mit. Man kann es setzen und wieder auslesen. Allerdings wird es mitten beim Laden der Seite wieder Nil. Das heißt, meine ID oder was auch immer ist weg. Was ich gerade versuche ist, das ich auf einem IdHTTPServer Connecte. Dann wollte ich mir von dort die AResponseInfo.Session.SessionID "Klauen" und mit TIdContext in IdTCPServer.Execute springen. Allerdings weiß ich garnicht ob das klappt. Zumal ich eine HTTPS Verbindung brauche. Um nicht noch mehr stolperfallen zu haben, versuche ich es im Moment ohne HTTPS. Ich weiß auch nicht ob ich beiden (IdHHTPServer und IdTCPServer) den gleichen IOHandler geben kann. Was ich noch gar nicht weiß ist ob das überhaupt klappt was ich vorhabe. Aber ich werde es mal versuchen. Entweder es geht, oder nicht. Allerdings bin ich so langsam am ende. Ich hatte noch nie soviele Probleme. Trotzdem danke Nachtrag: Hat sich schon erledigt. Ich kann ja gar nicht 2 Sachen auf einen Port legen.:cry::cry: |
AW: TCPServer Session/Eindeutige ID ermitteln
Für eine einzige Webseite gibt es oftmals schon mehrere Connections (HTML, CSS, JS, Bilder, ....)
und beim Refresh oder Laden der nächsten Seite erneut. Für TCP sind das alles einzelne "unabhängige" Verbindungen, wie du bereits bemerkt hast. Darum wurden dir auch Cookies empfohlen. Dort kannst du der "Session" im Browser eine ID verpassen, welche dann für alle nachfolgenden Verbindungen mit an dich übermittelt werden. Aber dort mußt du dein Vorhaben eben auf Ebene des HTTP umsetzen und nicht im TCP, oder du fängst an das HTTP dort selber "nochmal" zu implementieren, also nach dem Connect die ersten paar Byte/Zeilen (den HTTP-Header) abwarten/auslesen und darauf dann die Verbindung zu steuern. Im selben Browser mehrere gleichzeitige Fenster/Tabs lassen sich so aber auch nicht wirklich unterscheiden, außer du baust die ID in die URL ein, da sich die Tabs/Fenster die selben Cookies teilen. |
AW: TCPServer Session/Eindeutige ID ermitteln
Zitat:
Ich dachte mir das so: Ist der Parameter nicht gesetzt, dann muss es ein neuer Client sein. Dann den Parameter setzen und ich würde den immer "wiederfinden" wenn er was möchte. Halt bis man das Browserfenster zu macht. An Cookies habe ich mich schon gar nicht ran getraut. Im Moment steht ich echt auf dem Schlauch..... :? |
AW: TCPServer Session/Eindeutige ID ermitteln
Hier geht eben keine automatische Sessionverwaltung.
Bei TCP ist "standardmäßig" eine Session nur so lange, wie die Connection arbeitet und wird nicht automatisch über mehrere Connections geshared. Das mußt du übernehmen. (auch bei HTTP ist das nicht standardmäßig drin, aber kann mit vorhandenen Funktionalitäten umgesetzt werden) 1: Bei der ersten Connection eine ID generieren und an den Clienten senden (er speichert sie in den Cookies). 2: Der Client sendet diese ID dann innerhalb seine Session bei nachfolgenden Connections wieder an dich zurück. 3: Du schaust dann ob eine ID übermittelt wurde (wenn nicht, dann Punkt 1) und setzt/nutzt für nachfolgende Connections (innerhalt der Session der einzelnen TCP-Verbindungen) die übermittelte ID (nach Authentifizierung, dass diese ID auch noch gültig ist ... wenn nicht dann zu 1). So wird z.B. die Session-Verwaltung hier im Forum gehandhabt. Wenn Cookies gesperrt sind, dann könnte man die Session-ID als Parameter in die URL einbauen. Nach dem Laden der ersten Seite eine Weiterleitung zur URL inkl. SessionID und dann auf der Webseite auch alle Links mit dieser ID anpassen/erweitern. Alternativ kann man die Session eben anhand der IP verwalten, aber da geht pro IP nur eine Session. (auf HTTP-Ebene kann man das noch um Browser-Kennung und Dergleichen erweitern) - der Server speichert sich zur IP eine Session-ID oder nutzt die IP direkt als ID. |
AW: TCPServer Session/Eindeutige ID ermitteln
Hi,
so habe ich es vor. Allerdings weiß ich nicht wie ich an diese (sagen wir mal ID) drankomme. Ich bekomme beim Connecten, egal ob es die 1. oder 2. usw. ist. Folgendes:
Code:
Leider habe ich noch nicht rausgefunden wie ich "per Hand" (ich bin ja auf der TCP ebene) mit dem Client "reden" kann. Ich habe eben mal in HttpWatch und WireShark nachgesehen was so hin und her geht. Schlauer hat es mich nicht gemacht. Ob wohl ich eine Param.Value setze sehen ich das nirgends.
GET /set_config_webServices.html?tab=WebServices&menu=WebServicesConfig HTTP/1.1
Accept: text/html, application/xhtml+xml, */* Referer: http://192.168.0.2:800/info_specialPages.html?tab=Home&menu=InfoPages Accept-Language: de-DE User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Accept-Encoding: gzip, deflate Host: 192.168.0.2:800 DNT: 1 Connection: Keep-Alive GET /hp/device/defaultnew.css HTTP/1.1 Accept: text/css, */* Referer: http://192.168.0.2:800/set_config_webServices.html?tab=WebServices&menu=WebServicesConfig Accept-Language: de-DE User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Accept-Encoding: gzip, deflate Host: 192.168.0.2:800 DNT: 1 Connection: Keep-Alive GET /hp/device/bullet.gif HTTP/1.1 Accept: image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5 Referer: http://192.168.0.2:800/set_config_webServices.html?tab=WebServices&menu=WebServicesConfig Accept-Language: de-DE User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Accept-Encoding: gzip, deflate Host: 192.168.0.2:800 DNT: 1 Connection: Keep-Alive Das habe ich mit einem IdHTTPServer gemacht. Dabei ist mir augefallen das 10.6.2.0 einen Parameter mehr hat als 10.6.0.0. Und zwar SessionIDCookieName. Was ich nun gemacht habe, ist, ich lasse auf einen IdHTTPServer Connecten, verwende dort die Authentifizierung und setze dort diesen Param.Value. Dann gebe ein Redirect auf ServerIP:800 raus. Dort läuft der LowLevel TCPServer. Aber, wie gesagt, ich habe keinerlei Ahnung wie ich dort wieder an den Param komme den ich gesetzt habe. Erst mal vielen dank für die Hilfe. Wenn du irgendwo eine Demo hast, wo man sieht wie man im TCPServer an die Param kommt wäre ich sehr dankbar. Gruß |
AW: TCPServer Session/Eindeutige ID ermitteln
Zitat:
Die erste Zeile davon ist der Befehl an den Server (Quelle der Daten und die Version des HTTP-Protokoll) und den Rest stell dir wie eine INI vor (: statt =), wo dir der Server ein paar Verbindungsparameter und Informationen übergibt. (z.B. auch die Cookies) -> HTTP-Request mit Header+Data Sowas gibt es auch beim Senden der Antwort, wo ebenfalls erst ein Header und anschließend die Daten rausgehn. Erste Zeile der Statuscode und dann eben Paramater zum Auswerten der Antwort (Format der Daten), Datum und auch die zu schreibenen Cookie. -> HTTP-Response mit Header+Data ![]() ![]() ![]() ![]() |
AW: TCPServer Session/Eindeutige ID ermitteln
Danke, die Links werde ich mir mal ansehen.
Was ganz merkwürdiges, ich hatte eben im Log wirklich mehrmals Cookie mit der Cookie ID drin stehen. Ich weiß leider nicht warum. Ich habe nix geändert. Man könnte sagen von ca. 50 mal stand es 5 mal drin. Wäre das immer da, dann wäre das endlich mal fertig. Vielen vielen dank für deine Hilfe. Heute werde ich allerdings nichts mehr machen. Kann nichtmehr sitzen... :cry: |
AW: TCPServer Session/Eindeutige ID ermitteln
Willst du auch SSL unterstützen? Dann kannst du das Injecten deiner Session nämlich leider auch vergessen. Für andere Protokolle als HTTP natürlich sowieso. Ich würde nach wie vor auf dem SOCKS Protokoll aufbauen, sofern du natürlich Kontrolle über die Browser/Anwendungen hast und dort deinen Server als Proxy einstellen kannst.
|
AW: TCPServer Session/Eindeutige ID ermitteln
Hi Zacherl,
den Socks von Indy habe ich mir mal angesehen. Weil ich muss SSL können. Deswegen habe ich nun an dieser stelle erst mal aufgehört. Es bringt ja nix wenn es nur ohne SSL läuft. Aber wie ich das was weiterleiten habe ich nicht so richtig kapiert. Hättest zu das vielleicht ein Stückchen Source für mich worauf ich aufbauen kann? Vielen dank im Voraus |
AW: TCPServer Session/Eindeutige ID ermitteln
SSL kann dennoch unterstützt werden.
Client/Browser <SSL> deineProxyAnwendung <SSL> derZielServer hier kann man einmal die SSL-Verschlüsselten Daten 1:1 durchreichen oder Client/Browser <SSL> deineProxyAnwendung und deineProxyAnwendung <SSL> derZielServer nutzen jeweils ein eigenes SLL-Zerzifikat (sie können auch das Selbe nutzen, aber eben jeder) Client/Browser <SSL> deineProxyAnwendungClientside <X> interneVerbindungUndDatenauswertungUndCookiemanipulationOhneSLL <X> deineProxyAnwendungServerside <SSL> derZielServer Du bist also kein dummer "ich reich allers durch"-Proxy, sondern für den clöient bist du der Server und für den Server bist du der Client und jeweils dazwischen kommt das SSL rein. |
AW: TCPServer Session/Eindeutige ID ermitteln
Hi,
kurz was ich probiert habe. Nicht böse sein. Ich habe zum IdHTTPServer eine SSL Verbindung aufgebaut. Der IdHTTPServer übernimmt die Authentifizierung. Passt alles mache ich ein Redirect auf den gleichen Server, allerdings einen anderen Port. Dort wartet der IdTcpServer. Ich bin nur im OnExecute weil das ohne SSL klappte. Nun kommt leider, wie von Zacherl prophezeit ein Fehler. Nun müsste ich nur noch wissen, welchen von den Indy Proxys ich nehmen muss. Ich bin irgendwie Total verwirrt und peile nun fast nix mehr. Vielleicht bekomme ich das dann ja doch hin. Gruß und danke im Voraus |
AW: TCPServer Session/Eindeutige ID ermitteln
Hmmm,
also ich habe es nun nochmal anders gemacht. Es klappt doch. Da ich im Moment nur ein Selbst gemacht Zertifikat habe muss ich es 2x bestätigen. Ich denke mal wenn es ein "Richtiges" ist, merkt man es nicht. Das bringt mich/uns zu dem alten Problem zurück, wie kann ich im IdTCPServer.OnExecute rausfinden ob der Param xy gesetzt ist und was steht drin. Und zu der Frage, warum bekomme ich auf einmal das Cookie mit der SessionID ins IdTCPServer.OnExecute geliefert. Ich weiß nicht wie es auf einmal kommt.
Code:
GET /hp/device/jquery.js HTTP/1.1
Accept: application/javascript, */*;q=0.8 Referer: https://192.168.0.2:800/ Accept-Language: de-DE User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko Accept-Encoding: gzip, deflate Host: 192.168.0.2:800 DNT: 1 Connection: Keep-Alive Cookie: IDHTTPSESSIONID=yaZplJnATWAbS9b Gruß Ein total verwirrter Mensch........ Nachtrag: Damit es klappte habe ich in IdTCPServer.OnConnect folgendes eingebaut. Das hatte ich mal irgendwo gelesen. Kann es daran liegen das ich auf einmal das Cookie bekomme?
Delphi-Quellcode:
if (AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase) then begin
TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough:= false; end; |
AW: TCPServer Session/Eindeutige ID ermitteln
HTTPClientMitSSL > TCPServerOhneSSL > programmintern 1:1 durchreichen > TCPClientOhneSSL > HTTPServerMitSSL
Die beiden Endunkte ver-/entschlüsseln und du dazwischen bekommt nur die verschlüsselten Daten zu sehn. HTTPClientMitSSL > HTTPServerMitSSL > programmintern durchreichen, verändern oder sonstwas > HTTPClientMitSSL > HTTPServerMitSSL Die beiden Endunkte ver-/entschlüsseln aber nicht "untereinander" sondern mit dir und du bekommst so die unverschlüsselten Daten. ![]() |
AW: TCPServer Session/Eindeutige ID ermitteln
Ups, sorry du hast geschrieben während ich meinen Beitrag editiert habe.
|
AW: TCPServer Session/Eindeutige ID ermitteln
Zitat:
|
AW: TCPServer Session/Eindeutige ID ermitteln
Hallo an alle die mir geholfen haben. Erst mal ein fettes Danke schön.
Das wird nun wohl meine letzte Frage sein. Ich habe alles soweit, mit SSL, am laufen. Nun habe ich es mit verschiedenen PCs und Browser Probiert. Ich bekomme immer das Cookie mit wie unten zu sehen ist. Nun zu meiner Frage: Kann ich mich nun darauf verlassen das es IMMER mit gesendet wird? Gruß und nochmals Danke....
Code:
GET /colorLok.png HTTP/1.1
Host: 192.168.0.2:800 Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Accept: image/webp,image/*,*/*;q=0.8 Referer: https://192.168.0.2:800/ Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8 Cookie: IDHTTPSESSIONID=huUYf4A3JAeyMUG |
AW: TCPServer Session/Eindeutige ID ermitteln
Nein. Wenn du das Cookie nicht selber erstellt hast,, bzw. es nicht aus deinem Programm kommt.
Du kannst in den Browsern mal nachsehn, wo das Cookie her kommt. Beim Erstellen/Setzen eines Cookie kann man den Gültigkeitsbereich angeben und es gab schon welche, die "ausversehn" das Cookie global für alle URLs freigeben. (was man eigentlich niemals machen sollte, außer man will es nutzen, für geheimes Tracking über mehrere Webseiten hinweg) Eventuell kommt das aber auch von der TIdHTTPServer-Komponente. Dann ja, wenn es aktiviert ist. :angle: ![]() ![]() GSessionIDCookie SessionTimeOut AutoStartSession oder CreateSession/EndSession SessionList SessionState |
AW: TCPServer Session/Eindeutige ID ermitteln
Also lieber das Cookie selber setzen. z.b. mit
Delphi-Quellcode:
Dann sollte es ja hoffentlich immer da sein, richtig?
AResponseInfo.Cookies.AddClientCookie('SessionID='+AResponseInfo.Session.SessionID);
|
AW: TCPServer Session/Eindeutige ID ermitteln
Hmm..
Gibt es da nicht in den Browsern einen Parameter um Cookies zu ignorieren/Abzulehnen ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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