Hallo zusammen, ich bin gerade dabei ein Tool zur Netzwerkanalyse unter Linux zu schreiben. Mir gelingt nun nur einen Teil des Netzverkehrs zu loggen. Ein Linux Board habe ich an Router über Ethernet angeschlossen. Am Windows PC werden verschiedene Aktionen gemacht,ja meistens www.HTTP Requests , die aber nicht geloggt werden können. Auch sehe ich nicht alle von Linux Board HTTP Responses( auf board läuft Webserver) Geht es so was auf Linux mit RAW Sockets? socket( AF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , (socklen_t*)&saddr_size) Ich habe noch da ein Verständnisproblem. Hat jemand schon Erfahrungen mit RAW Sockets sammeln können? Gruß& Danke raw
> Mir gelingt nun nur einen Teil des Netzverkehrs zu loggen. Welcher Verkehr? Der, der von und zu dem Board geht, auf dem auch der Logger läuft? Anderen sieht man bis auf Ausnahmen eh nicht... > Geht es so was auf Linux mit RAW Sockets? Prinzipiell ja, siehe tcpdump. Schau doch einfach mal in dessen Source.
Der Router wird an den Ethernet-Anschlüssen als Switch arbeiten, d.h. dein Linux-Board sieht nur den Traffic, an dem das Board beteiligt ist und Broadcasts.
PC Linux mit RAW Ethernet Logger -----Router------PC Windows(WLAN) | | | Internet Ich würde gerne Pakets zwischen PC Windows und Internet über Router loggen. Mit Putty von PC Windows baue eine eine TCPIP Verbindung auf. Auf PC Linux läuft ein Websever. Und ich kann loggen, HTTP Requestes von PC Windows. Respones mit Info wie Rückgabewerten sehe ich aber nicht, die werden nicht aufgezeichnet. Ich dachte, mit RAW Sockets kann ich komplett alles aufzeichnen.
Hallo, RawSockets heisst erstmal nur, das du ohne Protokoll wie TCP/IP arbeitest. Das ist ja auch gewünscht, wenn Du alles mitloggen willst. Aber warum selber programmieren? Kennst Du Wireshark? Auf welchem der drei Geräte läuft den der Logger? Aber wie gesagt, Nimm Wireshark. Gruß Olaf
raw schrieb: > Ich dachte, mit RAW Sockets kann ich komplett alles aufzeichnen. Aber nur das, was der Router dem Linux-Board zukommen lässt. Und der Traffic zwischen Windows-PC und Internet geht das Linux-Board nunmal nichts an. Nimm zwischen Windows-PC und Linux-Board einen Hub oder einen Manageable Switch, dann klappt das Mithören.
Konrad S. schrieb: > raw schrieb: >> Ich dachte, mit RAW Sockets kann ich komplett alles aufzeichnen. > > Aber nur das, was der Router dem Linux-Board zukommen lässt. Und der > Traffic zwischen Windows-PC und Internet geht das Linux-Board nunmal > nichts an. Nimm zwischen Windows-PC und Linux-Board einen Hub oder einen > Manageable Switch, dann klappt das Mithören. Oder verwende auf der Linux-Kiste ein Tool namens arpspoof (ist in dsniff enthalten) um die arp-tables im Windows-Kasten zu manipulieren. Dann kannst du gemütlich alles von deiner Linus-Maschine aus sehen. Funktioniert hervorragend, wenn du nicht gerade ein iOS Device mit iOS 7 oder Mac mit OS X 10.9 arpspoofen willst. Ich habe keine Ahnung, warum das nicht funktioniert, aber es funktioniert nicht... Hat hier jemand eine Ahnung, woran das liegen könnte?
1. wireshark ist das einfachste. wenn irgendwie möglich verwende das wireshark, es gibt massenweise doku dazu und es ist einfach zu bedienen. 2. ansonsten gibt es libpcap, mit dieser Lib kannst du recht einfach Pakete analysieren. 3. wenn du es per hand machen willst, ist das natürlich auch möglich. allerdings ist das nicht ganz so einfach wie man es von normalen tcp sockets kennt. --Zitat: siehe Buch "Hacking- The Art of Exploitation"-- While this program will capture packets, it isn’t reliable and will miss some packets, especially when there is a lot of traffic. Also, it only captures TCP packets—to capture UDP or ICMP packets, additional raw sockets need to be opened for each. Another big problem with raw sockets is that they are notoriously inconsistent between systems. Raw socket code for Linux most likely won’t work on BSD or Solaris. This makes multiplatform programming with raw sockets nearly impossible. --Zitat Ende-- mit folgendem syscall bekommst du deinen raw socket für tcp pakete:
1 | sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) |
Danach einfach mit recv und den üblichen Verdächtigen arbeiten. Beim Analysieren musst du die Strukturen von IP, TCP, UDP Paketen nicht neu erfinden. Du findest diese in /usr/include/netinet. Zum Beispiel gibts dort die Struktur von einem IP Paket zu finden:
1 | struct ip |
2 | {
|
3 | #if __BYTE_ORDER == __LITTLE_ENDIAN
|
4 | unsigned int ip_hl:4; /* header length */ |
5 | unsigned int ip_v:4; /* version */ |
6 | #endif
|
7 | #if __BYTE_ORDER == __BIG_ENDIAN
|
8 | unsigned int ip_v:4; /* version */ |
9 | unsigned int ip_hl:4; /* header length */ |
10 | #endif
|
11 | u_int8_t ip_tos; /* type of service */ |
12 | u_short ip_len; /* total length */ |
13 | u_short ip_id; /* identification */ |
14 | u_short ip_off; /* fragment offset field */ |
15 | #define IP_RF 0x8000 /* reserved fragment flag */ |
16 | #define IP_DF 0x4000 /* dont fragment flag */ |
17 | #define IP_MF 0x2000 /* more fragments flag */ |
18 | #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ |
19 | u_int8_t ip_ttl; /* time to live */ |
20 | u_int8_t ip_p; /* protocol */ |
21 | u_short ip_sum; /* checksum */ |
22 | struct in_addr ip_src, ip_dst; /* source and dest address */ |
23 | };
|
Vielen Danke für Eure Antworten, ich habe gerade libpcap heruntergeladen und bin sehr gespannt, wie ich mit der Lib weiter komme.
raw schrieb: > PC Linux mit RAW Ethernet Logger -----Router------PC Windows(WLAN) > | > | > | > Internet > > > Ich würde gerne Pakets zwischen PC Windows und Internet über Router > loggen. Das geht so nicht! Punkt. Dein Aufbau sieht nämlich in Wirklichkeit so aus
1 | PC Linux ---1-Switch-2---WLAN-AP.....PC Windows |
2 | | |
3 | 3 |
4 | | |
5 | Router |
6 | | |
7 | Modem |
8 | | |
9 | Internet |
Switch, Router, WLAN AP und Modem werden sich bei Dir möglicherweise in einem einzigen Gerät befinden. Der Switch weiß, an welchem Port welches Gerät hängt. Wenn der "PC Windows" ein Paket ins Internet schickt, weiß der Switch, dass das Paket, das an Port 2 reinkommt, an Port 3 geschickt werden muss, und er weiß auch, dass die Antwort auf dieses Paket auch wieder zurück an Port 2 geschickt werden muss. Die Daten kommen also gar nicht an Port 1 raus, und dadurch kann der Linux-Rechner die auch nicht sehen. Du kannst das Problem aber lösen. Das wird Dich zwar 80€ kosten, aber es geht. Du brauchst dafür einen managebaren(!) Ethernet Switch wie den HP Procurve 1810-24G v2 (J9802A). Die billigen für 10-30 Euro können das NICHT! Der Procurve hat eine sogenannte "Port Mirroring" Funktion, d.h. er kann alle Pakete, die auf einem Port rein- oder rausgehen, duplizieren und die Duplikate auf einem anderen Port ausleiten. Nur so kann dann Dein Linux-Analyse-PC die Paket überhaupt sehen. Du musst natürlich sicherstellen, dass die Pakete tatsächlich über diesen Switch gehen, d.h. der Windows-PC muss per Kabel an diesem Switch angeschlossen sein.
1 | Procurve |
2 | PC Linux -----Switch-----PC Windows |
3 | | |
4 | 1 |
5 | | |
6 | Router Switch-2---WLAN-AP.... |
7 | | |
8 | 3 |
9 | | |
10 | Router |
11 | | |
12 | Modem |
13 | | |
14 | Internet |
Früher (so vor 20 Jahren) gab es Ethernet Hubs. Das waren dumme Sternverteiler ohne eigene Intelligenz, die ein einem Port hereinkommende Pakete etwas verstärkt an allen Ports ausgegeben haben. Die gab es nur für 10 MBit Ethernet und selten auch für 100 MBit Ethernet, aber speziell die für 100 MBit Ethernet bekommt man praktisch nicht mehr. Mit einem Hub ging das ganze früher auch. Heutzutage gibts keine Hubs mehr, weil Switches wesentlich effizienter sind, im Gegensatz zu Hubs auch den Vollduplexbetrieb (senden und empfangen gleichzeitig) erlauben, und weil spätestens Gigabit Ethernet ohnehin nur noch vollduplex ist und damit immer einen Switch erfordert. So, jetzt kannst Du aufhören, den Fehler in Deiner Software zu suchen. fchk
Eventuell verfügt dein Router über Port Mirroring. Damit kann der Verkehr an einem oder mehreren Ethernet-Ports zusätzlich auch zu einem anderen Port gesendet werden - also einmal die Doku zum Router wälzen (auch die zum CLI).
Frank K. schrieb: > Früher (so vor 20 Jahren) gab es Ethernet Hubs. Und wegen genau solcher Problemstellungen werde ich meinen alten Hub auch nicht so schnell wegwerfen. :-)
Was du brauchst ist arp spoofing um deinem PC glauben zu lassen, die ip adresse deines routers gehört zur mac adresse deines messrechners. der kann dann die pakete an deinen router weiterleiten. Versuchs mal mit ettercap. Könnte aber problematisch sein wenn der switch in deinem router steckt und der die eigene mac adresse fest verdrahtet hat.
:
Bearbeitet durch User
Du kannst auch versuchen, das auf dem Router (openwrt o.ä.) laufen zu lassen...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.