![]() |
TCP Alles empfangen
Hallo,
ich bin momentan auf der Suche nach einer Möglichkeit um Daten auszulesen die zwischen Client und Server gesendet werden. Bei dem Client kann ich den Port ändern und dachte mir nun, dass ich ein Programm schreibe mit einer Server- und Clientkomponente. Das Programm nimmt die Daten vom Client entgegen und sendet sie weiter zum Server dabei wird der Inhalt in ein Memo geschrieben. Das ganze auch andersrum. Hat einer eine Idee wie ich alle Daten abfangen kann? Weil mit Readln das hilft mir nicht weiter das müssen nicht unbedingt Strings sein. Edit: Achja ich nutze die Indy komponenten |
Re: TCP Alles empfangen
|
Re: TCP Alles empfangen
Ich versuche das gerade mit IdSockInfo zu verwirklichen aber irgendwie will das nicht klappen.
Hab hier die hilfe für Indy benutzt: ![]() Hat nicht jemand ein Beispielprogramm womit das funktioniert? |
Re: TCP Alles empfangen
Alternativ geht es auch mit einem WinSocks Hook.
|
Re: TCP Alles empfangen
@Zacherl
Man muss dafür doch nicht gleich schweres Geschütz auffahren... @XXcD Was hast du denn so alles probiert? MfG |
Re: TCP Alles empfangen
Ich habe idTCPClient, IdIOHandlerStack und idSocksInfo auf meinem Formular.
Die sind miteinander verknüpft, aber hat keiner eine Idee wie ich sowas basteln kann? will ja nur die Daten durchschleifen und anzeigen. |
Re: TCP Alles empfangen
Du brauchst die IdSocksServer Komponente.
|
Re: TCP Alles empfangen
Hier haste ne kleine Demo.
Öffne deinen Internet Explorer; gehe auf Extras - Internetoptionen - (Reiter) Verbindungen - (unten) LAN Einstellungen - (3.) Checkbox "Proxy für LAN verwenden.." - Erweitert: Hier einfach bei Socks als IP 127.0.0.1 und 1080 als Port angeben. Anschließend kompilierst und führst die Applikation aus und versuchst ne Seite zu besuchen. Klar funktioniert es evt. nicht 100% - Feintuning musst du selber machen, ich habs mir nur mal so aus dem Arm geschüttelt.
Delphi-Quellcode:
MfG
program SOCKS4MiniProxy;
{$APPTYPE CONSOLE} uses Windows, Winsock; type TSOCKS4Header = record Version : Byte; Command : Byte; Port : Word; IP : DWord; UserID : Array[0..63] of Char; end; const Size = $2000; var WSAData : TWSAData; Server : TSocket; AddrIn : TSockAddrIn; Client, Host : TSocket; cAddrIn, hAddrIn : TSockAddrIn; AddrSize : Integer; X : Integer; Header : TSOCKS4Header; Data : Array[0..Size-1] of Char; DataStr : String; const DefPort = 1080; SockAddrInSize = SizeOf( TSockAddrIn ); procedure FilterStr(var Str : String); var i, j : integer; begin for i := 1 to Length( Str ) do begin j := Ord( Str[i] ); if ( j < 32 ) or ( j > 122 ) then Str[i] := '.'; end; end; function ConsoleCtrlHandler(dwCtrlType : DWord) : BOOL; stdcall; begin closesocket( Server ); WSACleanup; Result := True; end; begin WSAStartup( $101, WSAData ); Server := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); with AddrIn do begin sin_family := AF_INET; sin_port := htons( DefPort ); sin_addr.S_addr := INADDR_ANY; end; bind( Server, AddrIn, SockAddrInSize ); listen( Server, 0 ); X := 0; ioctlsocket( Server, FIONBIO, X ); SetConsoleCtrlHandler( @ConsoleCtrlHandler, True ); while True do begin AddrSize := SockAddrInSize; Client := accept( Server, @cAddrIn, @AddrSize ); if Client <> INVALID_SOCKET then begin FillChar( Header, SizeOf( TSOCKS4Header ), 0 ); // receive header recv( Client, Header, SizeOf( TSOCKS4Header ), 0 ); if Header.Version = $04 then begin hAddrIn.sin_family := AF_INET; hAddrIn.sin_port := Header.Port; hAddrIn.sin_addr.S_addr := Header.IP; Host := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); Header.Version := 0; if connect( Host, hAddrIn, SockAddrInSize ) = ERROR_SUCCESS then begin Header.Command := $5A; end else Header.Command := $5B; send( Client, Header, SizeOf( TSOCKS4Header ), 0 ); if Header.Command = $5A then begin // connection established // now receive from client, send to host Writeln( '-- Connection established --' ); DataStr := ''; repeat X := recv( Client, Data[0], Size, 0 ); if X > 0 then begin DataStr := DataStr + Copy( Data, 1, X ); send( Host, Data[0], X, 0 ); end; until X < Size; Writeln( '[CLIENT] received data' ); FilterStr( DataStr ); Writeln( DataStr ); // now receive from host, send to client DataStr := ''; repeat X := recv( Host, Data[0], Size, 0 ); if X > 0 then begin DataStr := DataStr + Copy( Data, 1, X ); send( Client, Data[0], X, 0 ); end; until X < Size; Writeln( '[HOST] received data' ); FilterStr( DataStr ); Writeln( DataStr ); Writeln( '-- Connection closed --' ); end; closesocket( Host ); end; end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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