Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TCP pakete bauen + senden (https://www.delphipraxis.net/100408-tcp-pakete-bauen-senden.html)

Innos 27. Sep 2007 21:45


TCP pakete bauen + senden
 
hihi^^

also 1. ich habe die SuFu genuzt und
2. war das einzige was ich dazu gefunden habe ein (glaub italienisches) Tutorial... also naja ich kann kein italienisch^^

vllt könnt ihr ma eben ein paar anfänge verraten, da ich weiß dass das thema etwas größer ist...

ich benutze Wireshark um meinen inet verkehr "abzuhören" und habe dadurch glaub ich alles nötige ... also
destination port etc und Sequenz number...

habe gelsesen was man für son tcp Paket alles brauch.
nur wie setzt man das alles zusammen und versendet es dann? geht das mit TServerSocket oder ClientSocket?

wäre sehr dankbar für etwas hilfe^^
mfg Innos!

Innos 27. Sep 2007 22:45

Re: TCP pakete bauen + senden
 
also:
ich habe ein Programm dass immer auf eine bestimmte IP zugreift und von diesem server ein bestimmtes paket empfängt...
jetzt imitiere ich den server mit meinem eigenen prog und leite quasi die IP von dem client programm über einen Loopback Adapter auf mein prog...
so client is an meinem server connectet nur wie sende ich jetzt dem client genau dieses paket?

also vllt so?

Delphi-Quellcode:
serversocket1.socket.connection[0].sendbuf( {ja und was kommt hier rein?^^});
oder vllt mit sendstream? und was muss ich dann da reinschreiben? mit wireshark kann ich die bytes des paketes zB als (Offset Hex) kopieren... nur das geht leider nicht wenn ich es direkt hinter sendbuf schreibe -.-

f.siebler 28. Sep 2007 09:38

Re: TCP pakete bauen + senden
 
Moin,

was auch immer du vor hast, schau dir doch einfach mal die Basics zu TCP/IP bei wikipedia oder so an..
das könnte dich weiterbringen...
vll. solltest du auch mal schauen auf welchen Ports was wo gesendet wird....

Innos 28. Sep 2007 12:15

Re: TCP pakete bauen + senden
 
ok^^ ich schau mir das bei wiki gleich mal an...

ansonsten hab ich die vermutung dass ich mein problem vllt nicht genau erklärt habe xD

also:
eine fremde anwendung kommuniziert über TCP mit einem fremden server... iwo im inet^^
und prüft quasi, ob die ID, die man eingibt gültig ist... Das Paket habe ich mit Wireshark ausfindig gemacht und kenne IP und Port und Header eigenschaften ...

Jetzt habe ich einen Loopback adapter erstellt mit der IP des fremden servers um die verbing des Programmes auf mein eigenes Programm weiterzuleiten. In meinem Programm habe ich nun eine TServerSocket komponente mit dem benötigten Port.
Das fremde Programm connected sogar auch auf meinen ServerSocket.

Jetzt mein Problem:
ich möchte genau das paket, dass ich mit wireshark ausfindig gemacht habe über meine server komponente dem fremden Programm schicken, damit es denk: "JA ich bin am richtigen server angelangt"

ich habe gelesen, was alles so ein TCP/IP Header beinhaltet (daten sind in wireshark aufgelistet)... außerdem laß ich, dass man um solche pakete zu verschicken eine andere komponente als TServerSocket braucht. nur 1. welche? und 2. wie impletier ich die damit ich so ein paket versenden kann?

so hoffe das war jetzt verständlich genug^^
jetzt lese ich mir wikipedia durch :zwinker:

shmia 28. Sep 2007 12:25

Re: TCP pakete bauen + senden
 
Soll dein Programm als Man-In-The-Middle agieren
(also Client <-> DeinProg <-> Server)
oder soll dein Programm selbstständig arbeiten und so vortäuschen selbst der Server zu sein ?
(also Client <-> DeinProg)
In beiden Fällen brauchst die TCP-Header selbst nicht kreieren, sondern nur die Nutzdaten herumschaufeln.
Die Netzwerkpakete (also Ethernet-Header, IP-Header, TCP-Header) werden von WinSock zusammengebaut.

Innos 28. Sep 2007 12:58

Re: TCP pakete bauen + senden
 
aha klingt interessant^^
also so hab ich mir das vorgestellt:

client (fremde anwendung auf meinem PC) >>>> Mein Programm (als Server)

und wie schaufel ich die nutzdaten um?
kann ich hierfür TServerSocket verwenden oder brauche ich eine andere komponente? und wenn JA kann mann die nutzdaten mit

Delphi-Quellcode:
serversocket1.socket.connection[0].sendbuf();
verändern / umschaufeln?

EDIT: also es findet nach wieshark diese "handshake" statt (also jetzt mit dem original server, mein prog hat damit noch nix zu tun) also erst sendet der client die syn=x, dann der server syn=y ack=x+1 etc, dann wieder der client ack und syn und dann sendet
der original server eine DATA stream... genau DIESEN müsste ich "simulieren", wenn statt original server mein Prog gestartet ist, da du meintest der header wird automatisch generiert^^ ich verstehe daraus dass ich mich also nur um diesen DATA stream kümmern muss richtig?

shmia 28. Sep 2007 13:16

Re: TCP pakete bauen + senden
 
Zitat:

Zitat von Innos
kann ich hierfür TServerSocket verwenden oder brauche ich eine andere komponente?

Ja, entweder TServerSocket, Indy-Komponenten oder sonstige Kapselungen für WinSock (Fastnet PowerSock).
TServerSocket wäre die einfachste Möglichkeit.
Statt SendBuf() würde ich aber SendText() verwenden; damit werden Zeiger sowie Beschaffung und Freigabe von Speicher vermieden.

Innos 28. Sep 2007 13:36

Re: TCP pakete bauen + senden
 
also sendtext('{dann einfach den DATA stream hier rein kopieren?}') ?

Innos 28. Sep 2007 14:16

Re: TCP pakete bauen + senden
 
also das mit sendtext geht nur bedingt... also das erste paket konnte ich damit erfplgreich senden und der client hat das auch alles empfangen (da es auch tatsächlich nur ein string war, den ich übergeben musste)... jetzt müsste ich aber ein DATA stream senden, das 1049 Bytes groß ist und das aus lauter verschiedenener unlesbare zeichen enthält 0o wenn ich das mit sendtext() versuche klappt es nicht, da diese zeichen nicht zu einem string erkannt werden :wall:

ich glaube jetzt komm ich mit sendtext hier nicht mehr weiter...

shmia 28. Sep 2007 17:00

Re: TCP pakete bauen + senden
 
Zitat:

Zitat von Innos
jetzt müsste ich aber ein DATA stream senden, das 1049 Bytes groß ist und das aus lauter verschiedenener unlesbare zeichen enthält 0o wenn ich das mit sendtext() versuche klappt es nicht, da diese zeichen nicht zu einem string erkannt werden

Das ist kein Problem. Das Gute an dem (Ansi-)String in Delphi ist, dass er beliebige Daten (auch $00) aufnehmen kann und dass er dynamisch verwaltet wird.
Beispiele:
Delphi-Quellcode:
var s, t:string;  x : double;
begin
   s:= #27'[w'; // Escape Sequence für Drucker
   s:= #0#0#0#0'test'#0; // String mit Hex Nullen drin (C-Compiler hätten da Probleme mit)
   s:= #$F2#$A0#$01#$05; // wirklich beliebiger Inhalt (könnten sogar Maschinebefehle sein)
   s:= StringOfChar(#$FF, 512) + s; // so spart man Schreibarbeit
   // wenn ein String länger als 80 (Limit ist 255) Zeichen ist
   // sollte man die Zeilen umbrechen und die Teilstrings mit + verketten
   s:= 'ein ganz langer string.................................................'+
       'der hier weitergeht';

   x := 3.14;
   // mit SetString kann man beliebige binäre Daten in einen String reinpacken
   SetString(t, PChar(@x), sizeof(x));

   // von Stream => String
   SetLength(s, stream.Size);  // Speicherplatz im String reservieren
   stream.ReadBuffer(s[1], Length(s));
Es gibt für einen AnsiString nur das Limit vom max 2GB; das sollte aber kein Problem sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.
Seite 1 von 2  1 2      

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