Forum: PC-Programmierung raspberry pi: udp sniffer


von tester (Gast)


Lesenswert?

Hallo,

für eine Kommunikationsanwendung wird ein raspberry pi eingesetzt.
Auf dem raspberry pi läuft ein mqtt broker. Dieser soll auch 
weiterlaufen.
Der mqtt broker bekommt von außen udp nachrichten. Genau diese udp 
Nachrichten möchte ich nun über einen Sniffer anzeigen lassen, ob auch 
die Nachricht ankommt oder nicht.
Ein python Skript mit einem udp server kann ich nicht starten, da dieser 
bereits geöffnet ist.

von Le X. (lex_91)


Lesenswert?

Ich bin mir nicht sicher ob ich dein Setup korrekt verbildlicht habe, 
aber normalerweise ist Wireshark für sowas das mittel der wahl.
Alternativ wäre tcpdump geeignet.
Mit tcpdump erzeugte Traces kann man übrigens in Wireshark laden und 
visualisieren lassen.

von tester (Gast)


Lesenswert?

Ich kann wireshark auf der console vom raspberry pi nicht starten.
Der raspberry pi bekommt udp Daten über das Mobilfunknetz.

von tester (Gast)


Lesenswert?

Wie müsste ich tcpdump benutzen damit ich UDP Nachrichten sehen kann?

von Olaf (Gast)


Lesenswert?

> Ich kann wireshark auf der console vom raspberry pi nicht starten.

Du kannst unter Unix eigentlich schon immer ein Programm so starten
das es sein Fenster auf einem entfernten Rechner oeffnet.

Nicht das ich es mit Wireshark schon probiert habe, aber das war 
eigentlich
schon vor 30Jahren eines der Dinge wo Linux den Windowskram outperformt 
hat. .-)

Olaf

von tester (Gast)


Lesenswert?

Hi Olaf was meinst du genau?

von tester (Gast)


Lesenswert?

Ich habe ja nur putty und die COnsole.

von Le X. (lex_91)


Lesenswert?

tester schrieb:
> Hi Olaf was meinst du genau?

tester schrieb:
> Ich habe ja nur putty und die COnsole.

Er meint damit dass man per ssh x-forwarding betreiben kann, d.h. du 
kannst auf dem Raspi ein GUI-Programm starten selbst wenn dieser keinen 
Bildschirm angestöpselt hat und siehst die GUI auf deinem PC.
Da du als ssh-client aber putty, vermutlich unter Windows nutzt fürchte 
ich dass das nichts wird.

tester schrieb:
> Wie müsste ich tcpdump benutzen damit ich UDP Nachrichten sehen kann?

Eine google-Frage nach "tcpdump udp" liefert unter anderem Folgendes:
https://unix.stackexchange.com/questions/549998/how-can-i-capture-all-the-udp-packets-using-tcpdump

von tester (Gast)


Lesenswert?

Wie funktioniert das mit der GUI genau? Kann dir nicht folgen.

von Le X. (lex_91)


Lesenswert?

tester schrieb:
> Wie funktioniert das mit der GUI genau? Kann dir nicht folgen.

Dir hier zu helfen würd den Rahmen des Supports, den ich bereit bin hier 
zu leisten, sprengen.
Mit dem Begriff "x-forwarding" solltest du aber genug Lektüre finden.

Ich würde dir aber nicht empfehlen diesen Weg weiter zu bestreiten.
An deiner Stelle würde ich versuchen tcpdump am Raspberry zu starten und 
die UDP-Frames in eine Datei zu loggen.
Diese Datei kannst du anschließend auf deinen PC kopieren und in 
Wireshark importieren.
Du kannst die Datei aber auch direkt mit einem Editor deiner Wahl 
öffnen.

von PittyJ (Gast)


Lesenswert?

Auf meinem Raspi funktioniert wireshark.

Und ich sitze auch nicht direkt davor, sondern mache eine X11 Umleitung 
mit

ssh -X username@IPNummer

Username und IPNummer muss dann bei dir passen.

Dann bekomme ich das X11 Fenster vom Raspi-wireshark auf meinen normalen 
Rechner.

Und wenn du Windows benutzt, installiere einfach eine VM mit Linux. In 
der kannst du dich dann mit dem Raspi verbinden.

von Hmmm (Gast)


Lesenswert?

tester schrieb:
> Wie müsste ich tcpdump benutzen damit ich UDP Nachrichten sehen kann?
1
tcpdump -s 1518 -Xni <interface> udp

Damit bekommst Du den UDP-Traffic auf dem Interface als Hexdump.
1
tcpdump -s 1518 -i <interface> -w output.pcap udp

Damit erzeugst Du ein File, das Du später mit Wireshark analysieren 
kannst. Beenden mit Ctrl+C.

von tester (Gast)


Lesenswert?

Ok ich danke euch.

Werde es mal testen.

von Ein T. (ein_typ)


Lesenswert?

tester schrieb:
> Ok ich danke euch.
>
> Werde es mal testen.

Das X Window System ist selbst schon netzwerkfähig und muß deswegen 
nicht unbedingt über SSH betrieben werden. Du kannst auch auf dem 
Windowssystem einen X-Server installieren und ihn für den Raspi mit dem 
Kommando "xhost +<raspi-ip>" für die IP-Adresse "<raspi-ip>" des RasPi 
freigeben, mit dem Befehl "xhost -<raspi-ip>" kannst Du die Freigabe 
wieder aufheben. Nach dem Start und der Freigabe des X-Servers auf 
Deinem Windows sagst Du dem RasPi mit der Umgebungsvariablen DISPLAY 
(Befehl: "export DISPLAY=<win-ip:0.0", mit "unset DISPLAY" kannst Du das 
wieder beenden), daß X-Programme auf dem RasPi ihre grafische Ausgabe an 
das Display 0.0 auf Deinem Windows senden und darüber bedient werden 
soll.

Da dieser Datenverkehr allerdings nicht verschlüsselt ist, empfehle ich 
dennoch das X-Forwarding von SSH, aber in beiden Fällen brauchst Du auf 
Deinem Windows einen X-Server zur grafischen Ausgabe und Bedienung des 
Programms.

Vielleicht möchtest Du es anstelle von Putty mit MobaXTerm [1] 
versuchen. Das hat direkt einen eingebauten X-Server und Du mußt keinen 
installieren.

Ein passender Filter für Deine Netzwerkdaten wäre zum Beispiel "proto 
\udp and port 1883", wenn Dein MQTT-Broker auf Port 1883 läuft. Diesen 
Filter kannst Du sowohl mit Wireshark, als auch mit tcpdump(8) benutzen, 
eine Dokumentation zur Filtersprache findest Du in der Manpage 
pcap-filter(7) auf Deinem Linuxsystem. Die kannst Du mit "man 7 
pcap-filter" anzeigen und mit einem Druck auf die Taste "q" wieder 
verlassen.

Wenn Du mehr mit Linux machen und nicht immer nachfragen willst, möchte 
ich Dir das Buch "Linux" von Michael Kofler wärmstens ans Herz legen. Du 
wirst sehr viel produktiver sein, und deutlich mehr Spaß an und mit 
Linux haben, wenn Du die Basics beherrschst und das System ein wenig 
verstehst.


[1] https://mobaxterm.mobatek.net/

von Rolf M. (rmagnus)


Lesenswert?

Ein T. schrieb:
> Das X Window System ist selbst schon netzwerkfähig und muß deswegen
> nicht unbedingt über SSH betrieben werden.

Allerdings sind zumindest unter Linux die Display-Manager meist so 
konfiguriert, dass sie den X-Server standardmäßig mit -nolisten tcp 
starten, und dann nimmt der grundsätzlich keine Verbindungsanfragen von 
außen entgegen.

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
Noch kein Account? Hier anmelden.