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
structip
2
{
3
#if __BYTE_ORDER == __LITTLE_ENDIAN
4
unsignedintip_hl:4;/* header length */
5
unsignedintip_v:4;/* version */
6
#endif
7
#if __BYTE_ORDER == __BIG_ENDIAN
8
unsignedintip_v:4;/* version */
9
unsignedintip_hl:4;/* header length */
10
#endif
11
u_int8_tip_tos;/* type of service */
12
u_shortip_len;/* total length */
13
u_shortip_id;/* identification */
14
u_shortip_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_tip_ttl;/* time to live */
20
u_int8_tip_p;/* protocol */
21
u_shortip_sum;/* checksum */
22
structin_addrip_src,ip_dst;/* source and dest address */
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.