Packet socket do promiskuitního režimu získaly jen místní dopravy

hlasů
3

Mám socket vytvořen socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)), a já jsem nastavit do promiskuitního režimu za použití:

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);

Problém je, že když jsem se udělat read()ze zásuvky, vrátí pouze data, která se děje z nebo přicházející do počítače.

Jak mohu získat číst a zpracovávat všechny pakety v síti?

Wireshark zobrazuje všechny pakety v pořádku, takže vím, že to není můj počítač nebo NIC. ifconfighlásí, že PROMISCpokud je v chodu.

Položena 25/08/2009 v 00:54
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
1

Zkuste použít SOCK_PACKET jako druhý argument do zásuvky (), spíše než SOCK_RAW.

Pokud jste na přepínači, budete pravděpodobně vidět pouze pakety, nebo pocházející z počítače. Zkuste rozbočovač.

Odpovězeno 25/08/2009 v 01:04
zdroj uživatelem

hlasů
4

Spolu s Rob Jones návrh, zkuste nástroj jako Wireshark , aby se ujistil, že jste obdržení pakety, které očekáváte na rozhraní. Alespoň to potvrdí (nebo vyvrátit), že máte problém s kódem.

Také je potřeba, aby se ujistil, že samotný interface je nastavena na promiskuitní režim. Pokud tomu tak není, pak můžete použít ioctl () jej nastavit:

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

I když je spuštěna aplikace, ujistěte se, že ifconfig hlásí příznak PROMISC pro toto rozhraní.

Všimněte si, že to bude muset být proveden jako privilegovaný uživatel.


Vyzkoušeny kód, jak je uvedeno. Pracuje pro mě. Samozřejmě (kvůli testu na řádku 102), to bude tisknout pouze údaje pro provoz TCP.

Odpovězeno 25/08/2009 v 01:07
zdroj uživatelem

hlasů
0

Váš port přepínače je také třeba správně nakonfigurován (SPAN port Cisco světě). Viz zde pro více informací:

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

A tady je info od společnosti Cisco o tom, jak SPAN porty fungovat:

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

Odpovězeno 25/08/2009 v 01:17
zdroj uživatelem

hlasů
0

Jedná se pravděpodobně nejedná o softwarový problém.

Jste pravděpodobně používáte špatný hardware. Počítač je pravděpodobně napojen na přepínači. Přepínače jsou dost chytří na to, aby „naučit“, které počítače jsou na které porty a směrování provozu pouze tam, kde je třeba jít. Z tohoto důvodu je přepínač filtrování paketů pro vás.

Chcete-li tento problém odstranit, je třeba získat rozbočovač. Ačkoli huby a přepínače jeví jako velmi podobné, ale funguje jinak. The Hub je němý, a bude trasa veškerý provoz na všech portech, což vám umožní vidět ostatní provoz ve smíšeném režimu.

Všimněte si, že i když jste nahradit zařízení, které váš počítač připojí k, je pravděpodobné, že spojena s více přepínačů proti proudu, což bude také omezit provoz. Z tohoto důvodu nebude moci čichat provoz z mnohem větší vzdálenosti, než své vlastní rozbočovač nebo test-lab nastavení.

Odpovězeno 25/08/2009 v 04:58
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more