Komplex !? Packet-Programming
-
Hallo,
es geht darum, dass ich die Packete die ein Programm senden
will, emulieren möchte, ich habe den Header auch schon vorbereitet:Bei dem Protokoll handelt es sich um TCP
/* ADRESS (an den Router) */ /* set mac destination */ //packet[i]=0; packet[i++]=0; packet[i++]=4; packet[i++]=226; packet[i++]=87; packet[i++]=59; packet[i++]=248; /* set mac source */ packet[i++]=0; packet[i++]=16; packet[i++]=220; packet[i++]=229; packet[i++]=41; packet[i++]=51; /* Header */ /* Type: (we want IP!!) */ packet[i++]=8; packet[i++]=0; /* Version: It's "4" */ packet[i++]=69; /* Different Services (not needed!) */ packet[i++]=0; // packet 16 (i = 15) /* Total Length */ packet[i++]=0; packet[i++]=52; /* IDENTIFICATION!!!??? */ packet[i++]=207; packet[i++]=169; /* Flags: We need to choose "dont fragment" */ packet[i++]=64; packet[i++]=0; // <- Offset packet[i++]=128; // <- Timeout packet[i++]=6; // <- PROTOCOLL: TCP /* Header: CHECKSUM!!!! */ packet[i++]=40; packet[i++]=50; // Only for the header!!! /* Adress: IP NOW! */ //source packet[i++]=192; packet[i++]=168; packet[i++]=2; packet[i++]=4; // my IP //destination packet[i++]=213; packet[i++]=248; packet[i++]=106; packet[i++]=67; // DESTINATION IP /* TRANSMISSIOM CONTROL PROTOCOL */ //Source Port: packet[i++]=10; // Source Port packet[i++]=22; // = 2582 //Destination Port: packet[i++]=23; // Destination Port packet[i++]=224; // = 6112 //Sequence number:0!? (relative number) packet[i++]=57; packet[i++]=163; packet[i++]=122; packet[i++]=211; //Acknowledgement number:0!? (relative number) packet[i++]=222; packet[i++]=216; packet[i++]=165; packet[i++]=35; //Header Length packet[i++]=80; //20 bytes //Flags (0x0018) [PSH, ACK] packet[i++]=24; //Window size (65151) packet[i++]=254; packet[i++]=127; //Checksum packet[i++]=230; packet[i++]=139; //2 Packets buffer packet[i++]=0; packet[i++]=0;Leider funktioniert das noch nicht so ganz, da zu meinem Schreck einige Sachen variabel sind!
Ich habe auch schon ermittelt welche:
http://upload.wikimedia.org/wikipedia/de/8/80/UDP.PNG
Header: IP Header: Checksum <-Variabel ( Weil die Identification Number Variabel ist ) Identification Number <-Variabel UDP Header: Sequence Number <-Variabel Acknowledgement Number <-Variabel Window size <-Variabel Checksum² <-Variabel ( Weil einige Sachen auch Variabel ist )Und genau an diesem Punkt brauche ich eure Hilfe weil ich echt nicht mehr weiterweiß

Es gibt ein Programm namens "Winsock Packet Editor", das kommt auch schon mit den Angaben zurecht, was in dem Packet stehen soll,
wie komme ich denn jetzt an eine gültige Identification, Sequence, Acknowledgement und Window size, number.Außerdem verstehe ich noch nicht wie sich in solchen Packeten die "Checksum" errechnet.
Vielen Dank schonmal,
bitte bedenkt, dass ich gerade erst mit "Packeten"
anfange, mein Wissen ist also nicht zu groß
-
schon mal in erwaegung gezogen, strukturen zu benutzen?
und warum verschickst du nicht einfach ein udp-paket mit einer netzwerk-api deiner wahl?
-
hellihjb schrieb:
schon mal in erwaegung gezogen, strukturen zu benutzen?
und warum verschickst du nicht einfach ein udp-paket mit einer netzwerk-api deiner wahl?das ist keine netzwerk-api meiner wahl,
die habe ich vorher mit Etheral aufgezeichnet,
ich möchte einfach ein vorher aufgezeichnetes Packet,
nochmals senden!Die Basis dieses Codes ist von der Winpcap Seite,
wenn ich den "Mechanismus" verstehen würde, würde ich das
vielleicht effizienter schreiben.Bis jetzt ist es nur ein Sammeln von Daten,
und Analysieren
-
dein beispiel ist aber kein udp sondern tcp

hier haste ein tutorial für sowas: http://www.vijaymukhi.com/vmis/ethtcp.htm
-
net schrieb:
dein beispiel ist aber kein udp sondern tcp

hier haste ein tutorial für sowas: http://www.vijaymukhi.com/vmis/ethtcp.htmSorry, du hast natürlich recht es ist tcp,
werde mir das mal angucken, danke
-
dh du willst so tun als wuerde das paket von einem anderen rechner verschickt?
in wie weit das uberhaupt sinnvoll ist, kommt darauf an, was genau du vor hast; aber in dem fall musst du tatsaechlich den paket-header selber erzeugen.
und anstatt da mit einzelnen bytes rumzukaspern waere doch eine struktur zur abbildung eines tcp-pakets ganz geistreich und weniger fehleranfaellig.
nachdem der header existiert kannst du die nutzdaten eines "aufgezeichneten" pakets ja einfach 1:1 uebernehmen.
berechnung der checksumme geht so.