Frage

Ich habe eine Buchse mit socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)) erstellt, und ich habe es in der Promiscuous-Modus eingestellt werden:

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

Das Problem ist, dass wenn ich eine read() aus der Steckdose zu tun, ist es nur Daten zurückgibt, die aus los sind oder kommen zu meinem Computer.

Wie kann ich es lesen und alle Pakete im Netzwerk zu verarbeiten?

Wireshark zeigt alle Pakete in Ordnung, damit ich weiß, es ist nicht mein Computer oder NIC ist. ifconfig berichtet, dass es die PROMISC, wenn er ausgeführt wird.

War es hilfreich?

Lösung

Zusammen mit Rob Jones' Vorschlag, versuchen, ein Tool wie Wireshark , um sicherzustellen, dass Sie erhalten die Pakete, dass Sie an der Schnittstelle erwarten. Mindestens das bestätigen (oder verweigert), dass Sie ein Problem mit Ihrem Code haben.

Auch müssen sicherstellen, dass die Schnittstelle selbst in den Promiscuous-Modus eingestellt ist. Wenn nicht, dann können Sie die ioctl () verwenden, setzen sie:

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

Während die Anwendung ausgeführt wird, stellen Sie sicher, dass ifconfig berichtet die PROMISC Flagge für diese Schnittstelle.

Beachten Sie, dass diese müssen als privilegierter Benutzer ausgeführt werden.


Versucht, den Code, wie dargestellt. Funktioniert bei mir. Natürlich (aufgrund des Tests auf der Leitung 102), wird dies nur drucken Details für TCP-Verkehr.

Andere Tipps

Versuchen SOCK_PACKET als zweites Argument an die Buchse () verwenden, anstatt SOCK_RAW.

Wenn Sie an einem Schalter sind, werden Sie wahrscheinlich nur Pakete sehen bestimmt sind, oder die aus dem Computer. Versuchen Sie, eine Nabe.

Ihr Switch-Port muss auch angemessen (SPAN-Port in Cisco Welt) konfiguriert werden. Sehen Sie hier für weitere Informationen:

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

Und hier ist die Info von Cisco darüber, wie SPAN-Ports arbeiten:

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

Dies ist wahrscheinlich nicht ein Software-Problem.

Sie verwenden wahrscheinlich die falsche Hardware. Ihr Computer ist wahrscheinlich mit einem Switch angeschlossen. Switches sind intelligent genug, um zu „lernen“, welche Computer sind auf die Anschlüsse und leiten den Verkehr nur dorthin, wo es gehen muss. Daher wird der Schalter Ihre Pakete für Sie filtern.

Um dies zu beheben, müssen Sie einen Hub bekommen. Obwohl Hubs und Switches sehr ähnlich erscheinen, arbeiten sie anders. Der Hub ist stumm, und Route der gesamten Datenverkehr auf alle Ports, so dass Sie andere Verkehrsteilnehmer im Promiscuous-Modus sehen.

Beachten Sie, dass, auch wenn Sie das Gerät, dass Ihr Computer eine Verbindung herstellt ersetzen, ist es wahrscheinlich zu mehr verbunden ist, schaltet Up-Stream, die auch Grenzverkehr. Daher werden Sie nicht von viel weiter weg zu sniff Verkehr der Lage sein, als die eigene Hub oder Test-Laboraufbau.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top