Guten Ip&Tcpheader-struct
-
Hallo Leute,
ich verwende in meinem Programm bis jetzt erfolgreich einen WinPCap Packet-sniffer um eingehende Signale zu verarbeiten.
Bis jetzt muss ich mich aber mühsam in einer Schleife durch den header-tastet um bis an das daten-segment zu kommen. Dabei ist die größe des headers ja im ip-header und tcp-header gespeichert!
Es wäre viel sauberer und schöner einfach die beiden werte auf den Teil mit den MAC Adressen draufzuaddieren.
Leider finde ich keinen vernünftigen struct der funktioniert.
Hier mal mein code:
struct iphdr // structure IP Header { // little-endian unsigned char ihl:4; // IP header length unsigned char version:4; unsigned char tos; // Type of service unsigned short tot_len; // Total length unsigned short id; // Identification unsigned short frag_off; // Fragment Offset + Flags unsigned char ttl; // Time to life unsigned char protocol; unsigned short check; // Checksum unsigned int saddr; // Source address unsigned int daddr; // Destination address }; struct tcphdr // structure TCP Header { // little-endian unsigned short source; // port unsigned short dest; // port unsigned int seq; // Sequence number unsigned int ack_seq; // acknowledge sequence unsigned short res1:4, // Reserved 1 : 4 bits doff:4, // Data Offset fin:1, // Flag FINISH syn:1, // Flag SYNCHRONIZE rst:1, // Flag RESET psh:1, // Flag PUSH ack:1, // Flag ACKNOLEDGE urg:1, // Flag URGENT res2:2; // Reserved 2 : 2 bits (res1 + res2 = 6 bits reserved) unsigned short window; unsigned short check; // checksum unsigned short urg_ptr; // urgent }; //Das waren die structs, hier der code theIpHeader = (iphdr*)(pkt_data+0xE); theTcpHeader = (tcphdr*)(pkt_data+0xE+theIpHeader->ihl); int zTotalHeaderLen = 0xE+theIpHeader->ihl+theTcpHeader->doff; <- Funktioniert leider nicht, die header größe wird viel zu klein angegeben :-(Natürlich sollte die Lösung portabel sein.

Vielen Dank schonmal!

-
Das ist mir wirklich wichtig.
Eine andere Lösung konnte ich bis jetzt auch leider nicht finden
Danke