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


Anmelden zum Antworten