Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C] Implementazione Sniffer

    Salve a tutti, ho iniziato a giocare un po con le socket di sistema e volevo provare a realizzare uno sniffer. Leggendo i vari documenti e copiando alcune funzioni e parti di codice, ho scritto questo:

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>        //per chiamare la funzione exit()        
    #include <string.h>        //per usare la funzione strncpy()
    #include <netinet/in.h>        //utilizza la funzione socket()
    #include <sys/ioctl.h>        //utilizza la funzione ioctl()
    #include <net/if.h>        //contiene la struttura ifreq
    #include <linux/if_ether.h>    //contiene la macro ETH_P_IP

    struct sockaddr     sorgente;
    struct ifreq        interfaccia;

    int apertura_socket 0;
    char buffer[1500]; //massima lunghezza utile
    int lunghezza_pacchetto 0;
    unsigned char *contenuto_header;

    int main (int argc,char *argv[]) {

    //APRO IL SOCKET PER UTILIZZARE IN MODO DA COMUNICARE DIRETTAMENTE CON LA SCHEDA DI RETE
    //la funzione restituirà un valore maggiore di 0 che indica il canale di comunicazione

        
    if ( (apertura_socket socket(PF_PACKETSOCK_RAWETH_P_IP)) < 0

        {        
            
    printf ("Errore socket");
            exit(
    1);
        }
    //ABILITAZIONE DELLA SCHEDA DI RETE IN MODALITA' PROMISCUA
        
    strncpyinterfaccia.ifr_nameargv[1], IFNAMSIZ );
        
    ioctlapertura_socketSIOCGIFFLAGS, &interfaccia );
        
    interfaccia.ifr_flags |= IFF_PROMISC;
        
    ioctlapertura_socket SIOCSIFFLAGS, &interfaccia );
    //________________________________________________________

        
    strncpy(sorgente.sa_dataargv[1], sizeof(sorgente.sa_data));
        while (
    1
        {         
            
    recvfromapertura_socketbuffersizeof(buffer), 1500
                                  (
    struct sockaddr *)&sorgente, &lunghezza_pacchetto );

        
    contenuto_header = (unsigned char *)buffer;
        
    printf ("%02x"contenuto_header[0]);
        
    printf ("%s \n %d \n %s \n"buffersorgente.sa_familysorgente.sa_data);
        
    printf ("%s \n"lunghezza_pacchetto);
        
        }

    I printf alla fine li ho messi per provare a stampare alcuni dati, mentre il while infinito l'ho fatto per stampare sempre i dati in modo da vedere se venivano aggiornati durante la navigazione, ma non è cosi...
    Quale può essere il problema? grazie

  2. #2
    Per fare questo genere di cose è molto più semplice utilizzare libpcap/winpcap.
    Utilizzare i socket raw per fare questo genere di cose è in genere molto complesso e sopratutto limitante, dato che certe cose semplicemente non puoi farle.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  3. #3
    bhe da molte parti ho visto proprio l'implementazione di sniffer funzionanti in modalità raw senza l'utilizzo delle pcap, per questo ho deciso di fare cosi, anche perchè inizialmente mi ero dedicato alle pcap ma sn stato sconsigliato. Inoltre avrei bisogno di usare la raw perchè dovrei proprio lavorare a basso livello...Ho visto esempi di sniffer funzionanti senza pcap con poche righe di codice ma non capisco perchè il mio non funzioni

  4. #4
    Le pcap hanno svariati vantaggi rispetto a socket raw.
    Sono più veloci in quanto implementate come driver di sistema e sono sopratutto molto più semplici da usare (ad esempio puoi impostare filtri a livello di protocollo).
    Credo, inoltre, che determinate cose con socket raw non puoi proprio farle.
    Non so perchè te le abbiano scansigliate ma per fare sniffing le pcap sono lo standard de facto.
    Software come tcpdump o wireshark utilizzano pcap e non socket raw.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  5. #5
    si infatti avevo visto che wireshark e programmi simili utilizzano le pcap, ma sinceramente ho notato qualchè difficoltà in più ad implementare un programmino con quelle librerie...forse me le hanno sconsigliate perchè dopo aver realizzato lo sniffer, dovrei effettuare un programmino che esegue una sorta di attacco ddos o cmq un ping o qualcosa che butti giu un determinato pc nella rete e questo si deve fare ricostruendo il pacchetto...ho visto che con le raw si possono usare delle strutture gia pronte che ti permettono di fare ciò. forse mi è stato consigliato cosi in modo da imparare solo le raw...boh...
    in ogni caso qualcuno sa dirmi perchè quel codice che ho scritto non funzioni?

  6. #6
    Ciao. Premesso che non è una buona partenza l'idea di voler fare un attacco DDos. Ecco alcuni programmini che ho scritto con i raw socket e che magari possono tornarti utili.

    Sniffer: http://www.ptrace.net/content/sources/sniffer.c

    e Injector: http://www.ptrace.net/content/sources/injector.c

    Per quanto riguarda la scelta tra libnet/libpcap e raw socket. Va precisata una cosa; non vero che con libpcap puoi fare cose che con i raw socket non puoi fare. Semplicemente per il fatto che libpcap è una libreria di programmazione che utilizza i raw socket. D'altronde i raw socket sono il "punto d'accesso" più vicino alla scheda di rete che il kernel mette a disposizione.

    In ogni caso, se libnet/libpcap sono state sviluppate un motivo (e anche più di uno) c'è. L'implementazione dei raw socket tra i vari sistemi non è standard e pertanto un programma che va in Linux non andrà in Windows. Usando libpcap e il porting per windows WinPcap, potrai scrivere un programma che non sia più legato ad una particolare implementazione dei raw socket. Inoltre questa potente libreria fornisce una funzionalità molto interessante, la possibilità di filtrare certi pacchetti secondo regole che impostiamo noi.

    Per maggiori info ti consiglio una veloce ricerca con google.

    gnix
    http://www.ptrace.net

  7. #7
    come mai non è una buona idea effettuare un DDOS? dici per via del traffico che si creerebbe all'interno della rete? ci sarebbero altre soluzioni, ma alcune impallerebbero gli switch della rete e altre invece verrebbero bloccate dai firewall, quindi ho considerato l'attacco DDOS come la più attuabile.
    Per quanto riguarda i due link grazie mille, ho dato un'occhiata rapida, a me servirebbe uno sniffer molto semplice che mi controlli solo ip, mac senza ulteriori informazioni, per questo avevo scritto quelle poche righe di codice. Inoltre pensavo che utilizzando il raw socket, avrei maggiore portabilità visto ke lavoro direttamente con la scheda. Ma diciamo che comunque non è un mio problema perchè poi questo sniffer andrebbe installato su una macchina linux che fa da server.
    Per quanto riguarda google, penso ke in questo momento mi odierà perchè ho fatto un quantitativo enorme di ricerche ma partendo da zero ed essendo alla prima esperienza di programmazione ho molte difficoltà

  8. #8
    Originariamente inviato da sparpazeo
    come mai non è una buona idea effettuare un DDOS?
    Credo che stia parlando da un punto di vista "etico"... e in effetti ci sono modi più costruttivi per imparare ad usare i socket...
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    La realizzazione di attacchi DoS non è senz'altro un argomento trattabile su questo forum.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Sicuramente, però quello dell'attacco DOS è una cosa che mi servirebbe dopo e magari non tratterò cosi pubblicamente, ma al momento sono ancora fermo con lo sniffer...qualcuno sa darmi qualche altro suggerimento? Qualcuno che abbiamo provato il codice che ho implementato e mi sappia dire come mai non va...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.