Thread Binäre und oder nicht im Netzwerk Socket
(3 answers)
Opened by jmb at 2006-04-02 13:01
Hallo Zusammen,
ich habe das Problem, dass ich Inhalt, der im Netzwerk zwischen verschiedenen Nodes ausgetauscht wird, erkennen, vergleichen und danach eine Aktion treffen muss. Vorab zur Erklärung: Es gibt eine Variable, die hält den Netzwerkverkehr so wie er im Netzwerk für Perl aussieht. Danach dekodiere ich den Payload des Paketes anhand des Protokolls (derzeit kann ich IP, TCP, UDP, ICMP, IGMP). Funktioniert soweit sehr gut (ausser ich erhalte mal ein komprimiertes Bild, aber das ist eine andere, sehr leidensvolle Geschichte). Ein Beispiel: Jemand schickt in einer Email den Begriff "Hallo du Schimpfwort". Schimpfwort ist nicht erlaubt und wird dann verworfen oder verändert. Jemand schickt einen HTTP Request und will im Header die Variable menu_item auf a setzen, geht aber nicht, da nur integer werte zwischen X und Y erlaubt sind. Variablemwert wird "korriegiert". Nach der Aktion wird (basierend auf der Aktion) das Paket - je nach Protokoll - neu assembliert, neu berechnet und wieder ins Netz gelassen (oder eben nicht). Jetzt hab ich das Problem bei binären Paketinhalt (shell_binds, etc) - also Code, der nicht für die ausführende Applikation, sondern für den darunterliegenden Stack gedacht ist. Um endlich mal zum Punkt zu kommen, hier mein Code Snippet: Code: (dl
)
1 if($tcp_pkt_data =~ m/Inhalt\seinss/g) Wie ihr seht, hab ich das Problem, dass die entsprechenden Schleifenkoerper, die anhand von Regex Paketinhalt erkennen sollen, nun ''binär'' matchen sollen. Hab ich aber jetzt zum Beispiel einen Windows Add New User Code, dann sieht der, wenn ich ihn mir ausgeben lasse (ich lass ihn quasi vor dem Schleifenkoerper ausgeben), foldermassen aus (ist jetzt um die Schwachsinnigen Parts wie Netzwerk Auth, Socket Bind etc gekuerzt): Code: (dl
)
1 FFFFFFF0 360idjQFa6uKqp9cN0R6xXiM4nog2LBU9wuGNopBc7BsDEJ5JFzuaGT8G7sOojXLPZUzScM8mJSZjk2h8LKc5xKRQN Der obere Part sieht immer anders aus, der untere Part (also "¾ïQ@ëö...") immer gleich. Problem ist jetzt natuerlich, dass das, was ich hier gepostet habe, die Integrepation meines Terminal Programms ist, das versucht, den binären Inhalt, so darzustellen, dass der dumme Mensch (ich), das lesen kann. Und nun, endlich, komm ich zum Punkt: 1) Wie kann ich mein Problem lösen, dass ich binären Inhalt in der Regex matchen kann und gleichzeitig auch noch ACSII Inhalt (in einer anderen Regex und in einer anderen Schleife) Problem ist ja, dass ich binären und nicht binären Inhalt dann in das Skript schreiben muss. 2) Wie kann ich mir den binären Inhalt, der über das Netzwerk geht, in einer Form ausgeben lassen, die Perl wieder erkennt danach. Problem ist ja, dass das Matchen nur dann funktioniert, wenn Perl weiss, was ich ueberhaupt will. Wenn ich jetzt aber den Part, der mir ausgegeben wird, nehmen wuerde, hab ich ja nicht den binaeren Code, wie Perl ihn sieht, sondern die Interpretation der BASH darauf. Meine Überlegung war, dass ich es in ein file schreibe (im binary mode) und es dann einfach wieder draus lese. Prloblem ist dann nur wieder (jetzt wirds richtig haesslich), dass dieser Code auf Seitens des Configurations Clients gelesen werden muss und diese Kiste ist eine dot net Applikation. So, mein Monolog ist nun vorbei ;) Bin um jeden Tipp dankbar, der mir mit dem Problem hier weiterhelfen kann. Hoffe, die Erklaerungen kann man einigermassen nachvollziehen. Jmb Edit renee: Ich habe die letzte Zeile zwecks Übersichtlichkeit etwas gekürzt. Die ïQ@ëö¾ kommen noch einige Male mehr vor...\n\n <!--EDIT|renee|1143975769--> |