Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   FreePascal packet sniffer / packet modifizieren (https://www.delphipraxis.net/172274-packet-sniffer-packet-modifizieren.html)

thomasschaf 21. Dez 2012 20:07

packet sniffer / packet modifizieren
 
Hallo,

anhand dieses Codes (sniffer.zip Unit1.pas) möchte ich einen Filter bauen, der anhand der IP-Adresse der aufzurufenden Seite entscheidet, ob die Seite aufgerufen werden darf.
Ich nehme an, dass die IPs auf Internetseiten nicht dynamischen, sondern statisch sind, also die IP-Adresse von z.B. www.facebook.de immer dieselbe ist(?)
Darüberhinaus möchte ich abhängig von der aufzurufenden Seite einen Warnhinweis mit HTML anstatt der eigentlichen Seite ausgeben.
Mit PfAddFiltersToInterface hat es schon grundsätzlich funktioniert, aber damit kann ich nur wie im Beispiel hier (packet filter API example wanted: delphi / program netblock) Seiten sperren, sodass der Browser endlos lädt oder dann irgendwann eine internene Fehlermeldung anzeigt, aber ich kann keinen eigenes HTML verfassen.,
Ich vermute,dass hier ein ganz anderer Ansatz von Nöten ist, geht es denn überhaupt mit Winsock?
p.S.: Sehe ich es richtig, dass es nichts bringt, den Buffer buf hier
Delphi-Quellcode:
recv(RawSocket, buf, sizeof(buf), 0)
zu ändern, da er nur ausgelesen wird und er sozusagen nur ein Kopie des eigentlichen Datenstroms ist?

Vielen Dank!

Zacherl 22. Dez 2012 16:13

AW: packet sniffer / packet modifizieren
 
Mit deinen Filtern kenne ich mich nicht aus, von daher kann ich dir nicht sagen, ob dort nur mit Kopien des Datenstroms gearbeitet wird, oder ob der Filter wie eine Art recv() und send() Hook fungieren. In letzterem Falle könntest du Datenströme auf jeden Fall manipulieren.

Was du benötigst ist aber auch weniger ein Filter, als ein globaler HTTP Proxy. Grundsätzlich ist es definitiv möglich Websiten auch umzulenken, statt nur den Verbindungsaufbau zu verhindern. Eine Möglichkeit wäre hier die IdHTTPProxy Komponente zu verwenden und dann sämtliche Benutzeranwendungen mit dem kleinen Tool "Proxyfier" zu proxifizieren. Wenn deine Zielanwendung(en) von Haus aus Proxy Support mitbringen, ist Proxyfier natürlich nicht mehr nötig.

thomasschaf 22. Dez 2012 23:55

AW: packet sniffer / packet modifizieren
 
Hallo,

meinst du die Komponente TIdHTTPProxyServer ?
Ich habe übrigens Lazarus, vielleicht ist dessen Indy-Version (indy-10.2.0.3) nicht mit Delphis identisch?

Leider habe ich mit der Komponente noch nicht gearbeitet.
Wie muss ich da vorgehen?
Ich denke der Befehl ist
Delphi-Quellcode:
IdHTTPProxyServer1.StartListening;
aber dazu finde ich absolut nichts!

Habe in Proxifier mal die IP 127.0.0.1 (eigene)und den Port 8080 angegeben unter "Proxy Checker" und lasse dann testen aber es heißt
Could not connect to 127.0.0.1:8080

Im Objektinspektor habe ich
IdHTTPProxyServer1.Bindings = 127.0.0.1:8080
mal zum testen.

Liege ich mit allem total falsch?! Leider habe ich mit den Komponenten noch nichts gemacht und ich finde zu IdHTTPProxyServer auch fast nichts im Internet.
----

p.S.: Sehe ich es so richtig:
Internetanwendung (z.B. Internetbrowser) -> Proxifier -> Filterprogramm

Die Internetanwendung versucht eine Seite zu laden, die wird lokal am PC (also nicht im Netzwerk) , am PC aber global (also von der Anwendung unabhängig), "proxifiziert"-also über einen eigenen Proxy über das Filterprogramm dann übertragen und entsprechend gefiltert. Das Filterprogramm ist dann das zu schreibende Delphi-Programm mit der Komponente TIdHTTPProxyServer.

Vielen Dank schonmal für Deine Antwort!

Zacherl 23. Dez 2012 00:13

AW: packet sniffer / packet modifizieren
 
Also wenn es dir z.b. nur um den Browser geht, kannst du die Proxy Adresse auch direkt dort eintragen. Dann sparst du dir den Umweg über Proxyfier. Proxyfier sorgt nur dafür, dass auch Programme, die von "Haus aus" keinen Proxy Support mitbringen, um diese Funktionalität erweitert werden.

Versuche es mal mit IdHTTPProxyServer.Active := true. Dadurch sollte der Proxy schonmal erreichbar sein. Die Datenmanipulation bzw. Filterung selbst kannst du dann in den OnHTTPBeforeCommand, OnHTTPDocument und OnHTTPResponse Events der Komponente implementieren. Alle Informationen, wie z.b. das angeforderte Dokument, die HTTP Header und so weiter findest du im AContext Parameter, welcher jedem Event übergeben wird.

thomasschaf 23. Dez 2012 15:22

AW: packet sniffer / packet modifizieren
 
das hat gut funktioniert, die datenströme wurden erkannt. nur wie kann ich ihn modifizieren oder blocken?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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