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/)
-   -   Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen (https://www.delphipraxis.net/186477-indy-httpproxyserver-nur-bestimmte-ip-adresse-zulassen.html)

kuba 5. Sep 2015 00:24

Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich hab mir mal die Indy HTTPProxyServer Komponente angesehen. Die funktioniert wunderbar und ich kann damit alle Webseiten erreichen, sogar Videos funktionieren ruckelfrei. Aus dem Internet habe ich ein Codebeispiel zur Filterung einer bestimmten IP-Adresse. Leider ist der Code nicht ganz vollständig, die Frage wie die Filterung funktioniert bleibt offen...

Mit dem Proxy würde ich gern alle Webseiten sperren und nur eine IP-Adresse zulassen, am besten wenn alle anderen Webseiten umgeleitet werden. Vielleicht kann mir jemand ein Tip geben. Im Anhang habe ich mal das Beispiel ohne Exe-Datei.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdContext, IdBaseComponent, IdComponent,
  IdCustomTCPServer, IdTCPServer, IdCmdTCPServer, IdHTTPProxyServer,
  IdTCPConnection, IdTCPClient, Vcl.StdCtrls, IdMappedPortTCP;

type
  TForm1 = class(TForm)
    IdHTTPProxyServer1: TIdHTTPProxyServer;
    Memo1: TMemo;
    IdMappedPortTCP1: TIdMappedPortTCP;
    procedure IdHTTPProxyServer1BeforeCommandHandler(ASender: TIdCmdTCPServer;
      var AData: string; AContext: TIdContext);
    procedure IdHTTPProxyServer1Connect(AContext: TIdContext);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure IdMappedPortTCP1OutboundConnect(AContext: TIdContext);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  PeerIP, OtherIP : String;


implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
  //if IdHTTPProxyServer1.Active then
  //IdHTTPProxyServer1.Active := False
   //else
    //IdHTTPProxyServer1.Active := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if IdMappedPortTCP1.Active then
   IdMappedPortTCP1.Active := False
   else
    IDMappedPortTCP1.Active := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IdHTTPProxyServer1.Active := True;
end;

procedure TForm1.IdHTTPProxyServer1BeforeCommandHandler(
  ASender: TIdCmdTCPServer; var AData: string; AContext: TIdContext);
begin
  Memo1.Lines.Add(PeerIP + ' ' + AData);
end;

procedure TForm1.IdHTTPProxyServer1Connect(AContext: TIdContext);
begin
  PeerIP := AContext.Connection.Socket.Binding.PeerIP;
end;

procedure TForm1.IdMappedPortTCP1OutboundConnect(AContext: TIdContext);
begin
  PeerIP := AContext.Connection.Socket.Binding.PeerIP;
end;


end.
KUBA

kuba 5. Sep 2015 18:07

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Hallo,

ich bin minimal weitergekommen :) für eine Blacklist funktioniert folgender Code:

Delphi-Quellcode:
procedure TForm1.IdHTTPProxyServer1BeforeCommandHandler(
  ASender: TIdCmdTCPServer; var AData: string; AContext: TIdContext);
begin
  Memo1.Lines.Add(PeerIP + ' ' + AData);
  if pos('www.google.de',AData) > 0 then raise Exception.Create('');
end;
Kann mir jemand einen Tip geben, wie die Whitelist aussehen könnte ??

KUBA

kuba 5. Sep 2015 18:14

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Manchmal ist man einfach zu blöd :)

Delphi-Quellcode:
if pos('www.google.de',AData) > 0 then exit else raise Exception.Create('');
KUBA

kuba 5. Sep 2015 22:53

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Schade, daß noch niemand einen Tip geben konnte. Die Info's zur IdHTTPProxyServer Komponente sind sehr rar.
Oben genannte Zeilen zur Freigabe/Sperrung von Webseiten funktioniert auf meinem PC recht gut.
Wenn ich das Projekt jedoch in einer virtuellen Maschine starte gibt's Probleme.

Ich vermute, daß da etwas nicht ganz synchron läuft. Manche Webseiten laden von anderen URL's und ich vermute, daß durch die ausgelöste Exception der Stream abreisst..

Ein Redirect wäre übrigens auch nicht schlecht ...

Keiner eine Idee ?

KUBA

kuba 5. Sep 2015 23:13

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Vielleicht wäre es gescheit einen Proxy Cache anzulegen und die gültigen Inhalte daraus zu entnehmen.

:?:

Klaus01 6. Sep 2015 06:45

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
.. ist das filtern von IP-Adressen nicht eine Aufgabe für eine Firewall?
Grüße
Klaus

kuba 6. Sep 2015 12:16

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Zitat:

Zitat von Klaus01 (Beitrag 1314866)
.. ist das filtern von IP-Adressen nicht eine Aufgabe für eine Firewall?
Grüße
Klaus

Nicht unbedingt, aber sagen wir mal ich sperre den Port 80 mit Hilfe der Firewall. Wie kann ich eine einzelne IP-Adresse freigeben ?

Block: netsh.exe advfirewall firewall add rule name="Block HTTP 80" protocol=TCP dir=out remoteport=80 action=block

Das Problem ist, Block geht vor Allow. Wenn Port 80 bereits geblockt ist kann ich nicht mehr sagen erlaube einer IP-Adresse den Port 80 trotzdem zu verwenden...

Lokaler Proxy
Ein lokaler Proxy ist ein Proxyserver, der entweder auf dem Quell- oder Zielsystem eingesetzt wird. Er nistet sich zwischen dem Browser des Clients und dem Internet ein. Lokale Proxys werden meist als Filter oder Konverter benutzt.

kuba

kuba 6. Sep 2015 22:12

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Zitat:

Zitat von Klaus01 (Beitrag 1314866)
.. ist das filtern von IP-Adressen nicht eine Aufgabe für eine Firewall?
Grüße
Klaus

Hallo Klaus,

ich hab alles abgecheckt und keine Möglichkeit gefunden den Internetverkehr über die Windows Firewall zu blocken und nur eine bestimmte IP-Adresse durch zu lassen. Eine FritzBox hat auch eine integrierte Firewall, da kann man eine Whitelist hinterlegen. Das macht aber nicht die Firewall sondern der Router (vermute ich mal).

Ohne ein "Proxy-Gateway" oder eine Paketfilterung geht es offensichtlich nicht. Leider habe ich noch keine wirklich weiterführenden Infos gefunden. Der "Pseudo-Proxy" mit den Indy's funktioniert nicht optimal, jedenfalls nicht mit dem von mir geposteten Code ...

KUBA

kuba 6. Sep 2015 22:22

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Übrigens,

früher ging das Beschränken von Internetadressen bequem mit dem Microsoft Inhaltsratgeber. Seit Windows 10 funktioniert das aber nicht mehr. Den Inhaltsratgeber muss man vor der Benutzung aktivieren, mit einem Registry Key Namens "ShowContentAdvisor". Bis dahin funktioniert es mit Windows 10 noch, wenn man den Inhaltsratgeber aktivieren will ist die Schaltfläche ausgegraut. Auch nicht so schlimm, Internetexplorer "als Administrator" starten und die Schaltfläche funktioniert. Dann kann man sein Kennwort hinterlegen und den Content einschränken. Probiert man dann den Zugriff auf die gesperrten Webseiten dann verweigert der Inhaltsratgeber seinen Dienst.

Toll Microsoft, was habt ihr euch dabei gedacht ? Der Inhaltsratgeber fehlt offensichtlich in Windows 10, lässt sich aber aktivieren und mit ein paar Tricks auch Konfigurieren. Leider aber keine Funktion :?:

KUBA

kuba 7. Sep 2015 22:49

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
 
Nach langer Suche bin ich endlich fündig geworden. Für alle, die einfach nur einen gut funktionierenden Proxy benötigen, möchte ich SYNAPSE ans Herz legen ...

Der Demo Proxy funktioniert wirklich super und ich habe eine geeignete Stelle gefunden um mich einzuklinken 8-)

Man benötigt zwar eine ältere Delphi Version und hat kein 64-Bit, aber notfalls läsßt sich das mit Lazarus beheben :roll:

KUBA


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