Domanda

ho scritto un programma molto semplice C per fare una cattura dei pacchetti utilizzando pcap. Cosa è, raccoglie solo fino a un piccolo sottoinsieme della mia attività di rete. (Credo che il modello è che si raccoglie solo fino a nuove connessioni TCP.)

Per esempio, raccoglie su un mucchio di pacchetti quando faccio una richiesta GET con un browser o con wget, o quando avvio il mio client IRC X-Chat e collegare.

Tuttavia, quando lascio il mio client IRC in esecuzione non prendere sui pacchetti corrispondenti ai messaggi di testo. Allo stesso modo, non salire su trasmissioni ARP sulla mia rete domestica, o pacchetti di ping quando il ping di un sito web.

mi chiedo il motivo per cui solo è in ripresa su questo piccolo sottoinsieme dei pacchetti che sto invio / ricezione. Ecco il mio codice. Sono grato per tutte le risposte.

Codice: http://pastebin.com/QDHRy6jM

È stato utile?

Soluzione

riparato. Quando cambio il mio valore di timeout da -1 a qualcos'altro che funziona (vale a dire che riprende tutte le attività di rete). Non so davvero cosa sta succedendo lì (non si sono ancora molto pensato), quindi se qualcuno fa Holla favore.

Altri suggerimenti

Da probabilmente accadendo è che si sta eseguendo su una piattaforma in cui il timeout si comporta il modo in cui lo fa con BPF (* BSD, OS X), Solaris o Windows con WinPCap, in cui il sottostante meccanismo di bloccaggio del pacchetto che pcap utilizza non esprime immediatamente pacchetti, ma tamponi di una partita di pacchetti e li consegna ai pcap sia quando il buffer è pieno o quando scade il timeout, e -1 si sia interpretato come "nessun timeout" o "un tempo molto lungo timeout".

In questo caso, se un numero sufficiente pacchetti arrivano a riempire il buffer, come potrebbe essere il caso se si fa un HTTP GET e sufficientemente grande risposta ritorna, o se la sessione IRC comporta un sacco di pacchetti per la connessione, la pacchetti verranno visualizzati, ma se solo i pacchetti occasionali arrivano, come ad esempio i pacchetti ARP su una rete per lo più tranquilla, i pacchetti rimarranno nel buffer fino a quando abbastanza pacchetti arrivano a riempire il buffer, che potrebbe richiedere un tempo indeterminato lungo, o il molto lungo timeout, che potrebbe richiedere un po 'di tempo.

Abbassamento il timeout (tcpdump utilizza 1000, ovvero 1 secondo, e utilizza Wireshark 100, ossia 1/10 di secondo) significa che i pacchetti apparirà in tempi ragionevolmente breve periodo di tempo, anche se non abbastanza pacchetti arrivano a riempire la tampone.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top