Domanda

Ho un socket creato con socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)), e ho impostato in modalità promiscua utilizzando:

struct ifreq ifr;
strncpy((char*)ifr.ifr_name, interface, IF_NAMESIZE);
if(ioctl(sock, SIOCGIFINDEX, &ifr)<0) fail(2);

struct packet_mreq mr;
memset(&mr, 0, sizeof(mr));
mr.mr_ifindex = ifr.ifr_ifindex;
mr.mr_type = PACKET_MR_PROMISC;
if(setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) fail(2);

Il problema è che quando faccio una read() dal socket, restituisce solo i dati che sta andando da o venendo al mio computer.

Come posso ottenere per leggere ed elaborare tutti i pacchetti sulla rete?

Wireshark mostra tutti i pacchetti bene, quindi so che non è il mio computer o NIC. ifconfig riferisce che è PROMISC quando è in esecuzione.

È stato utile?

Soluzione

Insieme con suggerimento di Rob Jones', provare uno strumento come Wireshark per assicurarsi che si sta ricevendo i pacchetti che ci si aspetta a livello di interfaccia. Almeno che confermerà (o negare) che hai un problema con il codice.

anche bisogno di fare in modo che l'interfaccia stessa è impostato in modalità promiscua. Se poi non si può usare l'ioctl () per impostare:

ifr.ifr_flags |= IFF_PROMISC;
if( ioctl(sock, SIOCSIFFLAGS, &ifr) != 0 )
{
    // handle error here
}

Mentre l'applicazione è in esecuzione, assicurarsi che ifconfig riporta la bandiera PROMISC per tale interfaccia.

Si noti che questo dovrà essere eseguito come utente privilegiato.


Ho provato il codice così come presentato. Per me va bene. Naturalmente (dovuta alla prova sulla linea 102) questo stamperà solo i dettagli per il traffico TCP.

Altri suggerimenti

Prova a utilizzare SOCK_PACKET come secondo argomento di socket (), anziché SOCK_RAW.

Se siete su un interruttore probabilmente vedrete solo i pacchetti destinati a, o provenienti dal computer. Prova un hub.

Il porta dello switch ha anche bisogno di essere configurato in modo appropriato (porta SPAN in Cisco mondo). Vedi qui per maggiori dettagli:

http://www.winpcap.org/misc/faq.htm # Q-22

Ed ecco le informazioni da Cisco per quanto riguarda come porte SPAN funzionano:

http://www.cisco.com /en/US/products/hw/switches/ps708/products_tech_note09186a008015c612.shtml

È probabile che questo non è un problema di software.

Si sta probabilmente utilizzando l'hardware sbagliato. Il computer è probabilmente collegato a uno switch. Gli switch sono abbastanza intelligente per "imparare", che i computer sono in quali porte, e instradare il traffico solo a dove deve andare. Di qui, l'interruttore sta filtrando i pacchetti per voi.

Per risolvere questo problema, è necessario ottenere un hub. Anche se Hub & Switch appaiono molto simili, che funzionano in modo diverso. The Hub è muto, e instradare tutto il traffico a tutte le porte, che vi permetterà di vedere altro traffico in modo promiscuo.

Si noti che anche se si sostituisce il dispositivo che il computer si connette a, è probabile collegato a più interruttori a monte, che sarà anche limitare il traffico. Quindi, non sarà in grado di intercettare il traffico da molto più lontano di quanto il proprio hub o il test-lab setup.

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