Zum Inhalt springen

Sockets überwachen


Empfohlene Beiträge

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 :rolleyes:).

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...