struct iphdr *ip = (struct iphdr *)packet;



  • hallo forum

    im unteren text wird auf eine iphdr struktur aus ip.h zu gegriffen und zwar mit dem zeiger *ip.
    was macht aber (struct iphdr *)packet;

    zeigt der zeiger ip auf das packet?

    int main(void) 
    { 
    int rawsock, uid; 
    struct sockaddr_in addr; 
    unsigned int packetsize = sizeof(struct iphdr) + sizeof(struct tcphdr); 
    unsigned char packet[packetsize]; 
    struct iphdr *ip = (struct iphdr *)packet;
    


  • ja.

    Der Sinn ist, dass du die ersten N-Bytes als Struktur vom Typ iphdr interpretierst. Weiß aber nich ob das in C99 noch legal ist, wegen dem Strikt-Aliasing

    <edit>grml Alignment und Aliasing verwechselt :)</edit>



  • rüdiger schrieb:

    Weiß aber nich ob das in C99 noch legal ist, wegen dem Strikt-Alignment

    legal hin oder her, aber über einen struct* auf daten zuzugreifen, die wo anders her gekommen sind, ist immer schlecht. das gibt oft seltsame fehler...
    🙂


Anmelden zum Antworten