Buongiorno a tutti! Avrei una domanda da porvi. Intanto premetto che lavoro su OSX utilizzando gcc e un semplice editor di testo. Sto cercando di scrivere un programma che sia in grado di reperire autonomamente delle informazioni che transitano e vengono mostrate a schermo da un programma di terze parti il quale le reperisce online. La mia domanda è: è possibile accedere ai pacchetti "maneggiati" da tale programma senza entrare nel campo dello sniffing di rete, ovvero intercettando i pacchetti una volta che sono già stati indirizzati alla mia scheda di rete e quindi in un certo senso in locale? Oppure quella dello sniffing è l'unica strada?
Per quanto riguarda la strada dello sniffing sto cercando di scrivere un programmino che intercetti tali pacchetti usando la libreria pcap.h, anche se sono ai primi test con questa libreria e ancora per qualche motivo non riesco a far funzionare il programma che sto usando per familiarizzare appunto con questa libreria. Allego comunque il codice in questione, anche se mi farebbe piacere sapere che non è necessario andare per questa strada(o forse no, magari è la più semplice!):
codice:
#include <stdio.h>#include <stdlib.h>
#include <sys/wait.h>
#include <pcap.h>


int main(){
    pcap_t *sniff;
    char errbuf[PCAP_ERRBUF_SIZE];
    bpf_u_int32 net,mask;
    struct bpf_program filter;
    char filter_string[] = "tcp dst port 80";
    const u_char *packet;
    struct pcap_pkthdr header;
        
    if (pcap_lookupnet("en0", &net, &mask, errbuf) == -1) {
        printf("Impossibile ottenere netmask per il dispositivo 'en0'\n");
        net = 0;
        mask = 0;
    }
        
    if(!(sniff = pcap_open_live("en0", 1, 1, 0, errbuf))){
        printf("Errore durante la creazione della sessione di sniffing!\n");
    }
    
    printf("Sessione di sniffing creata con successo!\n");


    if(pcap_compile(sniff,&filter,filter_string,0,net)==-1){
        printf("Errore compilazione.\n");
        return(1);
    }
    
    pcap_setfilter(sniff, &filter);
    
    packet = pcap_next(sniff, &header);
    
    printf("%s\n", packet);
}
Premetto che tale programma mi serve soltanto per fini statistici e di analisi, in quanto ho bisogno di una mole enorme di dati che altrimenti mi sarebbe impossibile reperire "a mano".