Wie funktioniert inet_addr / in_addr?



  • Hi Leute und zwar wie kann ich ein "in_addr" Struktur selbst komplett füllen?

    Bzw. Welche Funktionen gibt es noch um eine in_addr Struktur zu füllen? inet_addr füllt mir nämlich den 32 Bit wert, wie berechne ich die anderen 2x16 bzw. 4x8 Bits (ja die muss man nicht berechnen, ich weiß :))

    Hab es mal damit funktioniert liefert aber falsche Werte:

    BYTE ip1 = 192;
    							BYTE ip2 = 168;
    							BYTE ip3 = 1;
    							BYTE ip4 = 1;
    
    							pIpHeader->ip_dst.S_un.S_un_b.s_b1	= ip1;
    							pIpHeader->ip_dst.S_un.S_un_b.s_b2	= ip2;
    							pIpHeader->ip_dst.S_un.S_un_b.s_b3	= ip3;
    							pIpHeader->ip_dst.S_un.S_un_b.s_b4	= ip4;
    
    							pIpHeader->ip_dst.S_un.S_addr = ip1 << 24 | ip2 << 16 || ip3 << 8 || ip4;
    							pIpHeader->ip_dst.S_un.S_un_w.s_w1 = ip1 << 8 | ip2;
    							pIpHeader->ip_dst.S_un.S_un_w.s_w2 = ip3 << 8 | ip4;
    


  • Du hast nicht auf Host-Byte-Order vs. Network-Byte-Order geachtet. Ausserdem hast du | mit || verwechselt. 🤡



  • Du hast nicht auf Host-Byte-Order vs. Network-Byte-Order geachtet

    Öhm Nein? 🙄 Wasn dat 🙂

    Ausserdem hast du | mit || verwechselt.

    Danke 🙂





  • Ok, perfect es klappt - danke!

    unsigned long ip_add = ip1 << 24 | ip2 << 16 | ip3 << 8 | ip4;
    if(  htonl(ip_add) == inet_addr("192.168.1.1") )
    {
    	printf("\nYESSS :)");
    }
    

Anmelden zum Antworten