AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCP pakete bauen + senden
Thema durchsuchen
Ansicht
Themen-Optionen

TCP pakete bauen + senden

Ein Thema von Innos · begonnen am 27. Sep 2007 · letzter Beitrag vom 28. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Innos

Registriert seit: 5. Jun 2007
142 Beiträge
 
#1

TCP pakete bauen + senden

  Alt 27. Sep 2007, 22:45
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!
  Mit Zitat antworten Zitat
Innos

Registriert seit: 5. Jun 2007
142 Beiträge
 
#2

Re: TCP pakete bauen + senden

  Alt 27. Sep 2007, 23:45
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?

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 -.-
  Mit Zitat antworten Zitat
Benutzerbild von f.siebler
f.siebler

Registriert seit: 15. Jan 2007
Ort: Hamburg
170 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TCP pakete bauen + senden

  Alt 28. Sep 2007, 10:38
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....
Viele Grüße aus Hamburg
Fabian
sql-praxis.net: sql von der Theorie in die Praxis...
  Mit Zitat antworten Zitat
Innos

Registriert seit: 5. Jun 2007
142 Beiträge
 
#4

Re: TCP pakete bauen + senden

  Alt 28. Sep 2007, 13:15
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: TCP pakete bauen + senden

  Alt 28. Sep 2007, 13:25
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.
Andreas
  Mit Zitat antworten Zitat
Innos

Registriert seit: 5. Jun 2007
142 Beiträge
 
#6

Re: TCP pakete bauen + senden

  Alt 28. Sep 2007, 13:58
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

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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: TCP pakete bauen + senden

  Alt 28. Sep 2007, 14:16
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.
Andreas
  Mit Zitat antworten Zitat
Innos

Registriert seit: 5. Jun 2007
142 Beiträge
 
#8

Re: TCP pakete bauen + senden

  Alt 28. Sep 2007, 14:36
also sendtext('{dann einfach den DATA stream hier rein kopieren?}') ?
  Mit Zitat antworten Zitat
Innos

Registriert seit: 5. Jun 2007
142 Beiträge
 
#9

Re: TCP pakete bauen + senden

  Alt 28. Sep 2007, 15:16
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

ich glaube jetzt komm ich mit sendtext hier nicht mehr weiter...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: TCP pakete bauen + senden

  Alt 28. Sep 2007, 18:00
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.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:51 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