Informatik und Kram

Da wir lange nicht wußten, wo wir das für die Uni ausgearbeitete Material unterbringen sollten und auch einen schrecklichen Drang hatten der Welt diverse Sachen aufzudrücken...

Netzwerkkamera IP-250E unter Linux
de-flagge aktiviert en-flagge aktiviert

Letzter Newsletter von Pollin: Die Netzwerkkamera IP-250E von Iguard für schlappe 50 Euro. Und da wir für unseren Robo noch auf der Suche nach ner Kamera sind, die man direkt an die Fonera anschließen kann, war das quasi der Wink mit dem Zaunpfahl. Nix wie bestellt und ein paar Tage später war sie da. Doch wie kann man jetzt auf den Stream zugreifen? Für Windows gibts ein Programm, dass das kann, aber natürlich nicht für Linux. Reverse engineering und ne lange Nacht mit dem Meissner durchgehackt und schwupps, geht doch!

Was geht

Die Kamera stellt ein Webinterface zur Verfügung, über das man Einstellungen an der Kamera vornehmen kann. Hier lässt sich die Framerate, die Auflösung und sogar so Spielereien wie Motion Capture und Bilderupload mit automatischer Benachrichtigung per Email einstellen. Und auch einen Remote Port mit UDP, immerhin. Aber an dem Port kommt gar nichts an, nmap liefert keine Ergebnisse. Auch mal mit VNC und mplayer versucht darauf zu connecten, aber auch ohne Erfolg. Also musste ich nach langer Zeit mal wieder die Virtualbox anhauen und mein geliebtes Windows starten. Mit wine ließ sich die mitgelieferte Software leider nicht starten. Unter Windows greift das Programm IGuardView direkt auf den Stream zu und ermöglicht so freie Sicht mit der Kamera.

Datensammlung

Doch was passiert eigentlich bei der Verbindung. Vermutung: An den Port wird sich irgendwie identifiziert und anschließend erst startet der Stream. Also lauschen wir doch einfach mal, was gerade so über das Netzwerk rauscht. Ein tcpdump -s 0 -i eth0 -o /tmp/output und nebenbei die IGuardView angeschmissen und schon gehts los. Wireshark bietet sich anschließend zur Datenanalyse an. Wichtig ist bei tcpdump der Schalter -s 0, damit auch wirklich der gesamte Inhalt der Pakete mitgeschnitten wird.

Nachbauen

Zuerst werden ein paar Pakete hin und her geschickt, die zum Einen den Benutzer identifizieren und dann natürlich eine Verbindung aufbauen. Anschließend wird mit einer fortlaufenden Nummer ein neues Bild angefordert, das dann in 9-13 aufeinander folgenden Paketen mit jeweils 1022 bytes über den Ether gehen. Im ersten Paket von der Kamera sind zusätzlich noch 29 bytes an Informationen enthalten, wie zum Beispiel die Nummer des Bildes, Größe, usw. Erst die nächsten 941 bytes sind dann für das Bild bestimmt und fangen mit dem typischen JPEG Header "FF D8 FF" an.

Todo und Hinweise

Es gibt noch keine Abfrage für Passwort und Benutzername. Ich habe an der Kamera den Benutzer admin mit dem Passwort admin angelegt, stimmt das nicht, geht auch nix. Also diesen Benutzer mit dem Passwort im Webinterface anlegen!
Im Verzeichnis sollte sich dann auch noch die Datei gui.glade befinden, die die nötigen Informationen für die GUI bereitstellt.

Ergebnis

Python geht ab, kennen wir schließlich nicht anders, also mal eben das ganze schick verpackt und ne GUI drumherum gebastelt. Das Ergebnis kann sich sehen lassen. Hier noch schnell die Python Datei, in der man nur die Adresse und Port der Kamera einstellen muss und schon kanns mit einem python pyView.py losgehen: Und hier natürlich auch das Ergebnis des Videos. Geht ganz gut!

Kommentare

Sorry, wie startet man das Skript und die das Fenster?

Hi Stefan!
Das Programm einfach folgendermassen starten (in der Konsole eintippen):
python pyView.py
Du wirst die pyView.py noch mit einem Editor öffnen müssen, und die folgende Zeile entsprechend deinen Einstellungen ändern:
Camera = CamConnector("192.168.1.200", 9001, "/tmp/output")

Danke - läuft mit SPE - über die Konsole habe ich noch Probleme.
Gruß Stefan

geht - cool - Danke und Gruß S.

Sehr cool!
Ist es vielleicht möglich ne Java Version von dem Ganzen zu bauen?
Die nen Video-Stream erzeugt. (Währen nette Spielereien möglich)
Gruß Jan-Erik

Hallo Jan-Erik.
Das ist überhaupt kein Problem. Ich habe nur leider überhaupt keine Zeit im Moment und mit Java kenne ich mich überhaupt nicht aus.
Aber wirklich viel arbeit ist es nicht. Die Steuerbefehle kann man ganz gut im PythonCode erkennen (den ich bei Gelegenheit mal aufräumen werde)

Hi! Eigentlich eine tolle Idee mit dem Reverse Engineering!
Doch was muss jetzt genau gesendet werden? Ich habe die Kamera leider nicht, kann aber auch absolut keine struktur ruaslesen aus dem Pythonschnippsel. Der Schlangensprache bin ich dummerweise auch nicht mächtig :(

Kommentar schreiben