Analyse von TCP IP-Paketen auf bestimmte Inhalte im Datenbereich
In meinem aktuellen Projekt soll bei einer Prüfung des Datenbereiches von TCP/IP Paketen bei bestimmten definierten Inhalten eine Reaktion erfolgen. Gesucht wird zunächst das passende konzept.
Guten Morgen liebe Administrator-Gemeinde,
heute habe ich eine sehr spezielle Frage im Bereich TCP/IP. Nach tagelanger Recherche habe ich (hoffentlich) einige Ansätze für mein Projekt bekommen, frage aber lieber nach, ob ich mich da in eine Sackgasse bewege, um nicht noch mehr Zeit zu investieren. Kurze Beschreibung des Projektes:
Zum Testen habe ich einen Ubuntu Server aufgesetzt, es läuft Apache und PHP darauf, ebenfalls Wireshark zur Analyse. Der Server ist im Internet und lauscht auf Port 4000 auf bestimmte Informationen. Um diese Informationen geht es.
Geräte senden über GPRS/Internet über Port 4000 TCP/IP Pakete an meinen Webserver. Die kommen auch an, Wireshark dokumentiert dies. Ich brauche aber nur bestimmte Pakete, die ich filtern muß.
Schritt 1: Prüfung der Pakete auf Inhalt, gesucht wird eine definierte Seriennummer.
Schritt 2: Suche der Seriennummer in einer MySQL-Datenbank
Schritt 3: Falls erfolgreich, Rücksendung einer Freigabe in einem TCP/IP-Datenbank an das Gerät
Schritt 4: Gerät sendet TCP/IP-Datenpaket mit Life-Daten
Schritt 5: Diese Life-Daten werden umgewandelt und in einer MySQL-DB abgelegt
Zur Zeit versuche ich Schritt 1 umzusetzen. Wie prüfe ich am sinnvollsten die Pakete?
Ich könnte den Port 4000 in ein eigenes Root-Verzeichnis senden lassen, dort eine .htaccess Datei plazieren, die die Pakete an ein Skript sendet.
Das könnte PHP sein, wo ich über die Socket-Skripts versuchen könnte, die TCP/IP-Pakete auseinander zu nehmen. Ich könnte aber auch versuchen, die Bits zu zählen, um über die String-Skripts an die nötigen Informationen zu gelangen. Oder es gibt noch eine viel einfachere Lösung?
In JAVA scheint es auch entsprechende Funktionen zu geben. Das Ganze muß hoch effektiv sein, da später im Lifebetrieb einige 100 Geräte in 30 Sekunden-Abständen Daten loswerden sollen.
Es wäre mir eine große Hilfe, wenn mir einer von Euch helfen könnte, das Konzept zu definieren. Bei der Umsetzung mag es dann später noch weitere Fragen geben, aber zunächst ist das Konzept wichtig.
Vielen Dank für jede Hilfe
Chris
Guten Morgen liebe Administrator-Gemeinde,
heute habe ich eine sehr spezielle Frage im Bereich TCP/IP. Nach tagelanger Recherche habe ich (hoffentlich) einige Ansätze für mein Projekt bekommen, frage aber lieber nach, ob ich mich da in eine Sackgasse bewege, um nicht noch mehr Zeit zu investieren. Kurze Beschreibung des Projektes:
Zum Testen habe ich einen Ubuntu Server aufgesetzt, es läuft Apache und PHP darauf, ebenfalls Wireshark zur Analyse. Der Server ist im Internet und lauscht auf Port 4000 auf bestimmte Informationen. Um diese Informationen geht es.
Geräte senden über GPRS/Internet über Port 4000 TCP/IP Pakete an meinen Webserver. Die kommen auch an, Wireshark dokumentiert dies. Ich brauche aber nur bestimmte Pakete, die ich filtern muß.
Schritt 1: Prüfung der Pakete auf Inhalt, gesucht wird eine definierte Seriennummer.
Schritt 2: Suche der Seriennummer in einer MySQL-Datenbank
Schritt 3: Falls erfolgreich, Rücksendung einer Freigabe in einem TCP/IP-Datenbank an das Gerät
Schritt 4: Gerät sendet TCP/IP-Datenpaket mit Life-Daten
Schritt 5: Diese Life-Daten werden umgewandelt und in einer MySQL-DB abgelegt
Zur Zeit versuche ich Schritt 1 umzusetzen. Wie prüfe ich am sinnvollsten die Pakete?
Ich könnte den Port 4000 in ein eigenes Root-Verzeichnis senden lassen, dort eine .htaccess Datei plazieren, die die Pakete an ein Skript sendet.
Das könnte PHP sein, wo ich über die Socket-Skripts versuchen könnte, die TCP/IP-Pakete auseinander zu nehmen. Ich könnte aber auch versuchen, die Bits zu zählen, um über die String-Skripts an die nötigen Informationen zu gelangen. Oder es gibt noch eine viel einfachere Lösung?
In JAVA scheint es auch entsprechende Funktionen zu geben. Das Ganze muß hoch effektiv sein, da später im Lifebetrieb einige 100 Geräte in 30 Sekunden-Abständen Daten loswerden sollen.
Es wäre mir eine große Hilfe, wenn mir einer von Euch helfen könnte, das Konzept zu definieren. Bei der Umsetzung mag es dann später noch weitere Fragen geben, aber zunächst ist das Konzept wichtig.
Vielen Dank für jede Hilfe
Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195800
Url: https://administrator.de/contentid/195800
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
6 Kommentare
Neuester Kommentar
Moin,
erste Frage: Was verstehst du unter "Paket"? Es kann ja zum einen ein komplettes Informations-Paket sein (z.B. bei Positionsdaten ein Satz mit den Lat/Lng-Werten usw.). Oder meinst du wirklich ein einzelnes IP-Paket - hier müsstest du dann ja darauf Rücksicht nehmen das ein Paket fragmentiert worden sein kann…
Jetzt hast du natürlich die Option z.B. mittels Netcat einfach den Datenstrom abzugreiffen, in ne Datei zu loggen und dann mit einem zweiten Netcat die Dateien wieder in die Pipe zu senden. Nicht schön - aber machbar.
Alternativ könntest du einfach deinen Listener-Prozess ansehen - wenn du hier die Möglichkeit hast da in den Programmcode zu gucken dann wäre das m.E. der Platz an dem ich suchen würde.
Wenn du allerdings unter Echtzeit-Bedingungen arbeiten musst (je nachdem wie relevant die Daten sind die da kommen - beim autonomen Fahrzeug kann es ja durchaus relevant sein ob ich die Position des Fahrzeuges *jetzt* habe - oder vor 1 Sekunde (dann habe ich ggf. schon 15 Meter abweichung….)) dann wirst du mit beiden Wegen nix werden… Hier musst du dann schon mehr Aufwand betreiben - bis hin dazu das du das Programm im ASM schreibst und auf nem eigenen Chip laufen lässt ;).
Um da nen sinnvollen Tipp zu geben müsstest du halt schon die Randbedingungen erklären -> mit den Infos wäre noch so ziemlich alles möglich…
Schönen Gruß
Mike
erste Frage: Was verstehst du unter "Paket"? Es kann ja zum einen ein komplettes Informations-Paket sein (z.B. bei Positionsdaten ein Satz mit den Lat/Lng-Werten usw.). Oder meinst du wirklich ein einzelnes IP-Paket - hier müsstest du dann ja darauf Rücksicht nehmen das ein Paket fragmentiert worden sein kann…
Jetzt hast du natürlich die Option z.B. mittels Netcat einfach den Datenstrom abzugreiffen, in ne Datei zu loggen und dann mit einem zweiten Netcat die Dateien wieder in die Pipe zu senden. Nicht schön - aber machbar.
Alternativ könntest du einfach deinen Listener-Prozess ansehen - wenn du hier die Möglichkeit hast da in den Programmcode zu gucken dann wäre das m.E. der Platz an dem ich suchen würde.
Wenn du allerdings unter Echtzeit-Bedingungen arbeiten musst (je nachdem wie relevant die Daten sind die da kommen - beim autonomen Fahrzeug kann es ja durchaus relevant sein ob ich die Position des Fahrzeuges *jetzt* habe - oder vor 1 Sekunde (dann habe ich ggf. schon 15 Meter abweichung….)) dann wirst du mit beiden Wegen nix werden… Hier musst du dann schon mehr Aufwand betreiben - bis hin dazu das du das Programm im ASM schreibst und auf nem eigenen Chip laufen lässt ;).
Um da nen sinnvollen Tipp zu geben müsstest du halt schon die Randbedingungen erklären -> mit den Infos wäre noch so ziemlich alles möglich…
Schönen Gruß
Mike
Hi,
siehe z.B. http://ask.wireshark.org/questions/9682/trigger-an-executable-file-once ...
oder
http://www.snort.org/
Damit kannst du direkt mitschneiden und triggern.
Gruß
siehe z.B. http://ask.wireshark.org/questions/9682/trigger-an-executable-file-once ...
oder
http://www.snort.org/
Damit kannst du direkt mitschneiden und triggern.
Gruß