Sockets / Sniffer



  • Moin,

    ich dachte mir ich schreib mal ein sniffer der alle IP-Packete eines Ports
    per printf ausgibt.. Hat jemand da Vorstellungen über die Verfahrensweise ?
    Ich weiß nur dass die Socket - Funktionen Recv() .. dazu bestimmt nichts
    taugen..
    Man könnte sich natürlich auch bei google informieren, aber das Thema fehlt
    hier noch bei sockets..

    mfg



  • RAW Sockets



  • schon mal ein Anfang.. damit kann man das IP-Paket selber zusammenbauen, samt header.. wie man nun fremde pakete zur Analyse erhält werd ich jetzt herausfinden bzw. ein anderer ist schneller 🙂



  • .. Ist zwar ein linuxsample, aber sollte zur Verfahrensweise alles klären ..

    (ein reiner Textsniffer)

    #include <stdio.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netinet/ip.h>
    #include <netinet/tcp.h>
    
    int main(int argc, char *argv[])
    {
        int s, bytes;
        char buffer[1024], *data;
    
        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(struct iphdr) + sizeof(struct tcphdr);
            buffer[bytes] = '\0';
            printf("%s", data);
            fflush(stdout);
        }
    
        return 0;   
    }
    

    mfg



  • [Werbung]Schau mal in meine Sig[/Werbung]



  • 😃 , der is aber nicht aus deinem thread.. Wir könnten aber die gleiche quelle haben .. hehe



  • Original erstellt von hardcoreProgramierer:
    **.. Ist zwar ein linuxsample, aber sollte zur Verfahrensweise alles klären ..

    (ein reiner Textsniffer)

    #include <stdio.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netinet/ip.h>
    #include <netinet/tcp.h>
    
    int main(int argc, char *argv[])
    {
        int s, bytes;
        char buffer[1024], *data;
        
        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(struct iphdr) + sizeof(struct tcphdr);
            buffer[bytes] = '\0';
            printf("%s", data);
            fflush(stdout);
        }
        
        return 0;   
    }
    

    mfg**

    Im allgemeinen find ich es verdammt unfair, dass es mit Linux so easy geht...

    cu para
    😃




Anmelden zum Antworten