RAW Sockets



  • // includes
    #include <winsock2.h>
    #include <windows.h>
    #include <ws2tcpip.h>
    #include <stdio.h>
    
    // header
    typedef struct iphdr{
        unsigned char   h_lenver;
        unsigned char   tos;
        unsigned short  total_len;
        unsigned short  ident;
        unsigned short  frag_and_flags;
        unsigned char   ttl;
        unsigned char   proto;
        unsigned short  checksum;
        unsigned int    sourceIP;
        unsigned int    destIP;
    }IPHDR;
    
    typedef struct tcpheader{
         unsigned short int     sport;
         unsigned short int     dport;
         unsigned int           th_seq;
         unsigned int           th_ack;
         unsigned char          th_x2:4;
         unsigned char          th_off:4;
         unsigned char          Flags;
         unsigned short int     th_win;
         unsigned short int     th_sum;
         unsigned short int     th_urp;
    }TCPHDR;
    
    // main
    int main()
    {
        int s, bytes;
        char buffer[1024], *data;
    
        s = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
        if (s == -1)
        {
            perror("socket() failed");
            return 1;
        }
    
        while(true)
        {
            bytes = recv(s, buffer, sizeof(buffer), 0);
            data = buffer + sizeof(IPHDR) + sizeof(TCPHDR);
            buffer[bytes] = '\0';
            printf("%s", data);
            fflush(stdout);
        }   
    
        // quit
        return 0;
    }
    

    Wieso scheitert dieses Programm schon beim erstellen des sockets?



  • Ich glaub ich nehm die Frage mal ganz schnell zurück 🙄 🙄



  • Ok!, Aber warum geht das nicht?

    // includes
    #include <winsock2.h>
    #include <windows.h>
    //#include <ws2tcpip.h>
    #include <stdio.h>
    
    // header
    typedef struct iphdr{
        unsigned char   h_lenver;
        unsigned char   tos;
        unsigned short  total_len;
        unsigned short  ident;
        unsigned short  frag_and_flags;
        unsigned char   ttl;
        unsigned char   proto;
        unsigned short  checksum;
        unsigned int    sourceIP;
        unsigned int    destIP;
    }IPHDR;
    
    typedef struct tcpheader{
         unsigned short int     sport;
         unsigned short int     dport;
         unsigned int           th_seq;
         unsigned int           th_ack;
         unsigned char          th_x2:4;
         unsigned char          th_off:4;
         unsigned char          Flags;
         unsigned short int     th_win;
         unsigned short int     th_sum;
         unsigned short int     th_urp;
    }TCPHDR;
    
    // main
    int main()
    {
        int s, bytes;
        char buffer[1024], *data;
        WSADATA wsa;
    
        WSAStartup(MAKEWORD(1, 1), &wsa);
    
        s = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
        if (s == -1)
        {
            perror("socket() failed");
            return 1;
        }
    
        while( (bytes = recv(s, buffer, sizeof(buffer), 0)) > 0) {
    
            data = buffer + sizeof(IPHDR) + sizeof(TCPHDR);
            buffer[bytes] = '\0';
            printf("%s", data);
            fflush(stdout);
    
        }   
    
        // quit
        return 0;
    }
    


  • aloa paranoiac

    deine version hat bei mir auch fehler verursacht (BCB 6)

    folgender code compiliert jedoch anstandslos:

    //---------------------------------------------------------------------------
    // includes
    #include <winsock2.h>
    #include <windows.h>
    //#include <ws2tcpip.h>
    #include <stdio.h>
    
    #pragma hdrstop
    #pragma argsused
    
    // header
    typedef struct iphdr{
        unsigned char   h_lenver;
        unsigned char   tos;
        unsigned short  total_len;
        unsigned short  ident;
        unsigned short  frag_and_flags;
        unsigned char   ttl;
        unsigned char   proto;
        unsigned short  checksum;
        unsigned int    sourceIP;
        unsigned int    destIP;
    }IPHDR;
    
    typedef struct tcpheader{
         unsigned short int     sport;
         unsigned short int     dport;
         unsigned int           th_seq;
         unsigned int           th_ack;
         unsigned char          th_x2:4;
         unsigned char          th_off:4;
         unsigned char          Flags;
         unsigned short int     th_win;
         unsigned short int     th_sum;
         unsigned short int     th_urp;
    }TCPHDR;
    
    // main
    int main()
    {
        int s, bytes;
        char buffer[1024], *data;
        WSADATA wsa;
    
        WSAStartup(MAKEWORD(1, 1), &wsa);
    
        s = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
        if (s == -1)
        {
            perror("socket() failed");
            return 1;
        }
    
        while( (bytes = recv(s, buffer, sizeof(buffer), 0)) > 0) {
    
            data = buffer + sizeof(IPHDR) + sizeof(TCPHDR);
            buffer[bytes] = '\0';
            printf("%s", data);
            fflush(stdout);
    
        }
    
        // quit
        return 0;
    }
    

    hoffe es hilft dir

    Deadman


Anmelden zum Antworten