Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WSARecv Hook - Pakete loggen und ändern (https://www.delphipraxis.net/103716-wsarecv-hook-pakete-loggen-und-aendern.html)

Zacherl 20. Nov 2007 16:28


WSARecv Hook - Pakete loggen und ändern
 
Hey,

ich habe einen WSARecv für ein bestimmtes Programm installiert und möchte nun zunächst die Pakete loggen. Funktioniert alles wunderbar. Ich kenne das Protokoll der Anwendung: Ein neuer Befehl fängt mit dem Zeichen * an und die 2 Bytes danach beinhalten die Länge. Jetzt sind die Buffer, die ich über WSARecv empfange natürlich manchmal nicht komplett, oder aber es sind zu viele Daten enthalten.
Parsen kann ich das ganze auch, aber nun 2 Fragen:

* Kommen die Pakete sicher in der richtigen Reihenfolge an?
* Kann ich in diesem Falle einfach die Originalfunktion so oft aufrufen, bis mindestens ein Befehl vorhanden ist, den Rest puffern und beim nächsten Aufruf übergeben? Konkret geht es mir darum, dass ich nicht weiß, wie sich die Puffergrößen verhalten, die der Funktion WSARecv übergeben werden.

Gruß

shmia 20. Nov 2007 17:05

Re: WSARecv Hook - Pakete loggen und ändern
 
Zitat:

Zitat von Zacherl
* Kommen die Pakete sicher in der richtigen Reihenfolge an?

Ja, der TCP Stack sorgt für die richtige Reihenfolge.
Zitat:

Zitat von Zacherl
* Kann ich in diesem Falle einfach die Originalfunktion so oft aufrufen, bis mindestens ein Befehl vorhanden ist, den Rest puffern und beim nächsten Aufruf übergeben? Konkret geht es mir darum, dass ich nicht weiß, wie sich die Puffergrößen verhalten, die der Funktion WSARecv übergeben werden.

Du kannst ja mit mehreren Puffern arbeiten. Ich würde aber nur einen Puffer nützen (dwBufferCount=1).
In lpNumberOfBytesRecvd erhältst du die Anzahl der Bytes.
Wenn diese Anzahl < deiner Puffergrösse ist, dann bist du vorerst fertig.
Falls die Anzahl gleich deiner Puffergrösse ist, solltest du die Daten wegspeichern und gleich nochmal WSARecv aufrufen.
Du könntest aber auch die Funktion recv() aufrufen; die ist nicht so komplex und einfacher aufzurufen.

Zacherl 20. Nov 2007 17:55

Re: WSARecv Hook - Pakete loggen und ändern
 
Danke für deine Antwort :thumb: Recv kann ich leider nicht hooken bei diesem Programm. Wird irgendwie nie aufgerufen =/ Noch eine Frage zu den Buffern. flpBuffers enthält ja die BufferRecords, die je einen PAnsiChar und dessen Länge beinhalten. Es ist möglich diese Buffer einfach zu vergrößern? Oder würde das Probleme im Programm geben, welches die Buffer übergeben hat?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz