Guybrush Threepwood Geschrieben 8. August 2007 Teilen Geschrieben 8. August 2007 Ich hatte in den letzten Tagen die Idee mir ein Programm zu schreiben das alle geöffneten Sockets ermittelt und überwacht ob bzw. was da gerade gesendet und empfangen wird. Das Ganze mit einer zuordnung zum jeweiligen Process zu dem das Socket gehört. (jaja mir war langweilig im Urlaub ). So ich erstelle mir momentan eine Processliste mit CreateToolhelp32Snapshot (tausche ich evtl. noch durch EnumProcesses aus) und ermittle mir dann alle Handles die der Process hat. Dann versuche ich festzustellen ob es sich bei dem Handle um ein Socket handelt in dem ich getsockname damit aufrufe. Jetzt hab ich ja theoretisch eine Liste aller Processe mit dazugehörigen Sockets. Aber wie stelle ich jetzt fest was da gesendet und empfangen wird? Also was empfangen wird geht ja evtl noch per recv und MSG_PEEK wodruch die Daten ja nicht vom Socket entfernt werden und die eigentliche Anwendung nicht gestört wird (hoffe ich). Aber wie bekomme ich das was über das Socket woanders hin gesendet wird? Eine andere Möglichkeit die ich mir angesehen habe wäre WSAEventSelect, aber soweit ich das sehe bekomme ich dann nur mit das etwas gesendet oder empfangen wurde aber nicht was. Wenn dieses grundlegende Problem gelöst ist stellt sich mir im Moment noch die Frage wie ich darauf reagiere das Programme zu einem späteren Zeitpunkt weitere Sockets erstellen. Im Moment hätte ich ja nur eine Process bzw. Socketliste zu einem bestimmten Zeitpunkt die sich aber ja jederzeit ändern kann. Bin für alle Ideen dankbar. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. August 2007 Teilen Geschrieben 8. August 2007 Also was empfangen wird geht ja evtl noch per recv und MSG_PEEK wodruch die Daten ja nicht vom Socket entfernt werden und die eigentliche Anwendung nicht gestört wird (hoffe ich).Das geht nicht wirklich. Das fremde Sockethandle ist in deinem Prozess sowieso nicht gültig, und selbst wenn es das wäre, ist nicht sichergestellt, dass du an die Daten kommst, bevor die Anwendung selbst sie abholt. Unter Vista könntest du WFP benutzen, aber bei älteren Versionen könnte das eklig werden. Wie wäre es denn mit WinPcap? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 8. August 2007 Autor Teilen Geschrieben 8. August 2007 Das geht nicht wirklich. Das fremde Sockethandle ist in deinem Prozess sowieso nicht gültig, und selbst wenn es das wäre, ist nicht sichergestellt, dass du an die Daten kommst, bevor die Anwendung selbst sie abholt. Also ich hab das Handle vorher per DuplicateHandle dupliziert, weiß aber nicht in wie weit das ausreicht weil ich noch nicht so weit bin das wirklich auszuprobieren. Wie wäre es denn mit WinPcap? Ja hab ich auch schon gefunden, aber ich möchte das selber machen und keine Bibliothek von einem Drittanbieter benutzen, ansonsten wäre das natürlich genau das was ich brauche Allerdings hab ich eben noch mal kurz nach ein paar anderen Stichwörtern gegoogelt und bin dabei über die Detours Library von Microsoft gestoßen, welche API Hooking und das einflanzen eigener DLLs in fremde Anwendungen anscheinend sehr einfach gestalltet (was ich ziemlich überraschend finde). Muss ich mal heute Abend ausprobieren Wenn das so funktioniert wie ich mir das vorstelle könnte ich ja dann einfach die entsprechenden Send und Recv Funktionen Hooken und die dabei anfallenden Daten an mein Programm senden welches die dann ausgibt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 10. August 2007 Autor Teilen Geschrieben 10. August 2007 hmm hab gestern noch ein wenig mit der detours Library rumgespielt und das scheint erstmal auch ganz gut zu klappen. Ich hab eine Dll erstellt welche die send Methode hookt und dann als Test den Internet Explorer damit gestartet. Beim Aufrufen einer Seite hab ich dann auch das bekommen was er dahin sendet Das Problem ist jetzt nur das detours wohl nur dafür ausgelegt ist ein bestimmtes Programm mit einer "Hook Dll" zu starten. Das heißt es gibt eine eigene CreateProcess Methode die dann halt unter anderem noch die DLL mitbekommt. Das bringt also erstmal nichts bei bereits laufenden Programmen, was ja sehr blöd ist. Muss ich wohl mal schauen ob ich die Detours Lib entsprechend anpassen kann und ob ich Informationen darüber finde wieweit sich das auf einen länger laufenden Prozess auswirken kann und ob das ändern der Lib überhaupt erlaubt ist... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.