![]() |
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! |
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:
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 -.-
serversocket1.socket.connection[0].sendbuf( {ja und was kommt hier rein?^^});
|
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.... |
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: |
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. |
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:
verändern / umschaufeln?
serversocket1.socket.connection[0].sendbuf();
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? |
Re: TCP pakete bauen + senden
Zitat:
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. |
Re: TCP pakete bauen + senden
also sendtext('{dann einfach den DATA stream hier rein kopieren?}') ?
|
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... |
Re: TCP pakete bauen + senden
Zitat:
Beispiele:
Delphi-Quellcode:
Es gibt für einen AnsiString nur das Limit vom max 2GB; das sollte aber kein Problem sein.
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)); |
Re: TCP pakete bauen + senden
also
diese Stream oder String keine ahnung sieht so aus:
Delphi-Quellcode:
so da gabs jetzt einmal das problem, dass mittendrin ein ' kam (also das ding, was strings eingrenzt zB bei x:='bla';)
‘L¸êÄ«ˆ—_˜¯¼BĤâBÎë]²‰ûq?-J¬0ÿƒŽÕl]VîU¯01‰ñÖ&ÇÃ*èƒFÅ:ElâÀŠ'Ç‹}E˜Ö¥ *uØ3}»OÙµÝðyq@²„µf’*¡D;%MÛeÜJßåˆuÔ
d.h. der hörte da auf... ich hab bisl probiert und einfach direkt ein ' daneben gemacht und es ging 0o naja dann war noch das problem mit diesen , manchmal hat delphi anstat diese dinger darzustellen einen absatz gemacht... aber das geht jetzt auch (fragt mich nicht warum) so deinen code werde ich gleich mal bei einem anderen paket ausprobieren THX erstmal dafür :D btw: kann man diese stream eigentlich iwie entschlüsseln? also gibt es vllt ein programm, dass häufig verwendete decodierungen hat? wäre ganz nützlich |
Re: TCP pakete bauen + senden
Zitat:
Zitat:
Zu deiner Frage mit dem entschlüsseln.... Ich denke, wenn du das willst, musst du die Daten selbst analysieren. |
Re: TCP pakete bauen + senden
wie sieht denn so ein byte array aus? also baut man da den header ein oder auch nur die nutzdaten... und wie nent sich das dann unter wireshark? da kann man nämlich diese nutzdaten kopieren als: Byte(Hex STream), Byte (Binary Stream) usw
|
Re: TCP pakete bauen + senden
folgene 8 Pakete (mehr hab ich nich probiert weil es zu deprimierend war^^)
tun absolut das gleiche
Delphi-Quellcode:
da eine regelmäßigkeit entdecken und das paket so ändern, iwie seine ID anstat die der beispiel ID einfügt^^, ist krank :D
//ÏP_wüXþX¦{q<øømd[@ ɺrýœpf°7ºrÍuy•ÆL4*óö×êIÖ»ìô0Á¹@êK‚Øÿc¨%¼“ŦF0V*€kXHJUJ€BeôÕ:4f<kÂF€°1ý’ò9› D“a‹Í 5KçÚwù?– ³/Ø
//Y7´¸}öß–Ö]Ùv?`Ü£ô k탪·‰ï9Âû¡=óáûjXáEÕ‰š<ÉXT*Ru[£tùhÓåÛÇÜ’lùí •øµnM””T›ó»óL$éh}±¼>/VõL4¶çóÀ£K+¯zˆÃ·¡ÝÊE£«n //1fìÆ'?-8ûQ½aDÑ%¦úXˆ,Á-5Ö[ߎ ¸äæ’Š1l6DÜ¢\êS˜BÌ$o,ížgj/hm©¢™vÎ/u*¿Zf¡/Û(ƒ"rÞŠû7·Q_)'(ÒÆŠr"öÙd¼<Ì”‰\bað‡&^ãÜqª //ê˜kD€FæÓÑw̱Ýs;Å„>Eѥ㲖Ӈi[ÏoQ"ßhnV—}3œê‹¿-¨[›WÃUÖÐHn5ÍTõG*àÛ¼…q¸-ÖÁ¶H+‚žYúºà~?NÔA¡@³º”.‹3h¥ -†–„Mrrp<D¿CšÊî©Ñ¥Y¸¤ //¿†”æBœƒ†Ä7¢@.<ë´{Z8Rå(2^n…Ê‘i4§ÐAF·'›3_ÄÔß0)³üY#)'+=±há˜ñd*œâ™®2Ô¢Õr"Ö–Q)+æ»æË*ÈŸ5]*ðQF6ê€4çæŠ5$GŸ˜•wÜ›º, //4«.EŦ“ùqm´e¹ûÕÂýÐÂÞàƒ½ Û<þÈš†½ff‘RM¦ëäf„:xŒ¶kiÔTÁ–¯ fyº˜!¼aíÌÁ©Ž]åÔ´pþf\nºfQÍ¢–žòŠƒÔ=sþ(Â.¯v-½wrj3|‹%p¢®=Sȶ@˜äÏ //ÇçbˆöÔ§–h¶þdHŸ:3Q{ì‚ÔLGÖ±GF*‰tAÁ«LYE]XuÔ:Yc¤U¼ÉÅo"Ê;§n ¬€Þã–5Ý$0¢ÏëÉÃCÏ2ë4°"o+ndТfx¸ûr˜í¼Œ¨.Ùª‘6¤÷·Ö–3`åk²‚A}wíêuÈÑ //‘L¸êÄ«ˆ—_˜¯¼BĤâBÎë]²‰ûq?-J¬0ÿƒŽÕl]VîU¯01‰ñÖ&ÇÃ*èƒFÅ:ElâÀŠ''Ç‹}E˜Ö¥ *uØ3}»OÙµÝðyq@²„µf’*¡D;%MÛeÜJßåˆuÔ |
Re: TCP pakete bauen + senden
Ich denke die Nutzdaten reichen.
Delphi-Quellcode:
Das ist nur ein Beispiel. Geht auch anders, z.B. mit Move() etc..... Tja, aber dieses Gewirr da zu entschlüsseln, äääh..... Ich muss weg! :-D
var
Bytes: TIdBytes; begin SetLength(Bytes, 20); Bytes[0] := 34; Bytes[1] := 54; Bytes[n] := i; end; |
Re: TCP pakete bauen + senden
hehe thx an euch^^ also einige pakete konnt ich erfolgreich senden bis halt zu diesem verschlüsselten teil :wall: :wall: :wall:
ich sitz da scho ewig vor und zähl iwelche zeichen :shock: :shock: :shock: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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