Guten Morgen,
ich bin dabei mir mit WinPCAP eigene Netzwerkpakete zusammenzusetzen,
jedoch finde ich die jetzige Umsetzung etwas unschön und schwer zu
warten.
Vlad Tepesch schrieb:> was spricht gegen die definition entsprechender structs?
Vermutlich auch nichts, man muss nur aufpassen, daß diese gepackt
sind, wenn Datentypen > Byte darin verwendet werden - und dann auch auf
die Byte-Order.
Rufus Τ. Firefly schrieb:> Vlad Tepesch schrieb:>> was spricht gegen die definition entsprechender structs?>> Vermutlich auch nichts, man muss nur aufpassen, daß diese gepackt> sind, wenn Datentypen > Byte darin verwendet werden - und dann auch auf> die Byte-Order.
Das ist der Grund, warum ich das nicht gemacht habe..
Dennis S. schrieb:> Rufus Τ. Firefly schrieb:>> Vlad Tepesch schrieb:>>> was spricht gegen die definition entsprechender structs?>>>> Vermutlich auch nichts, man muss nur aufpassen, daß diese gepackt>> sind, wenn Datentypen > Byte darin verwendet werden - und dann auch auf>> die Byte-Order.>> Das ist der Grund, warum ich das nicht gemacht habe..
Kein guter Grund.
Dazu gibt es in jedem noch so schmuftigen Compiler ein paar Pragmas, mit
denen man packing erzwingen kann. Und wenn die Struktur letzten endes
nur dazu dient, den unsigned chars aus dem Array einen Namen zu
verpassen, so dass man nicht mehr
1
packet[12]=0x08;/* Type IP */
2
packet[13]=0x00;
3
packet[14]=0x45;/* Version and Header-length */
4
packet[15]=0x00;/* Differentiated Services Field */
5
packet[16]=0x00;/* Total length */
6
packet[17]=0x34;
schreiben muss, sondern (mit der Hilfe von ein paar enums oder Makros)
schreiben kann
1
packet.Type=IP_TYPE;
2
packet.VersionLength=69;
3
packet.DiffServices=0
4
packet.TotalLength=0;
5
packet.SchiessMichTot=52;
und das ist dann doch schon um einiges übersichtlicher, als die
ursprüngliche Byteebene, in der eben alles einfach nur ein Byte war und
man sich mit zusätzlichen Kommentaren behelfen mus, um zu wissen, was
man da jetzt gerade eigentlich im Array befüllt.
Karl Heinz schrieb:>> Das ist der Grund, warum ich das nicht gemacht habe..>> Kein guter Grund.> Dazu gibt es in jedem noch so schmuftigen Compiler ein paar Pragmas
Möglicherweise hat sich Dennis auf den Teil mit der Byte-Order
bezogen, da muss man beim Befüllen der Struktur halt aufpassen
(natürlich nur, sofern diese Datentypen > Byte enthält).
Nein, nein es ging schon um das Packen der Struktur. Ich meine irgendwo
mal gelesen zu haben, dass das auf einigen Systemen zu Problemen führen
kann. Das Programm ist eigentlich auch nur ein "schneller" Hack deswegen
mache ich es erstmal wie von Rufus beschrieben. Danke an alle.
Dennis S. schrieb:> Ich meine irgendwo mal gelesen zu haben, dass das auf> einigen Systemen zu Problemen führen kann.
Nö, das tut es im Normalfall nicht. Wenn die Prozessorarchitektur keine
misalignten Zugriffe auf Operanden > Byte zulässt, muss der Compiler
entsprechend korrekten Code für den Strukturzugriff erzeugen.