AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCP Alles empfangen
Thema durchsuchen
Ansicht
Themen-Optionen

TCP Alles empfangen

Ein Thema von XXcD · begonnen am 10. Okt 2009 · letzter Beitrag vom 10. Okt 2009
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

TCP Alles empfangen

  Alt 10. Okt 2009, 04:04
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
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TCP Alles empfangen

  Alt 10. Okt 2009, 05:13
Funk als Proxy dazwischen!

Am einfachsten ginge es imho mit Socks.

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TCP Alles empfangen

  Alt 10. Okt 2009, 13:20
Ich versuche das gerade mit IdSockInfo zu verwirklichen aber irgendwie will das nicht klappen.
Hab hier die hilfe für Indy benutzt: http://www.indyproject.org/KB/tidtcp...lightsub=socks

Hat nicht jemand ein Beispielprogramm womit das funktioniert?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: TCP Alles empfangen

  Alt 10. Okt 2009, 14:08
Alternativ geht es auch mit einem WinSocks Hook.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TCP Alles empfangen

  Alt 10. Okt 2009, 14:36
@Zacherl
Man muss dafür doch nicht gleich schweres Geschütz auffahren...

@XXcD
Was hast du denn so alles probiert?

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#6

Re: TCP Alles empfangen

  Alt 10. Okt 2009, 14:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: TCP Alles empfangen

  Alt 10. Okt 2009, 15:35
Du brauchst die IdSocksServer Komponente.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TCP Alles empfangen

  Alt 10. Okt 2009, 15:38
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:
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.
MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz