AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen
Thema durchsuchen
Ansicht
Themen-Optionen

Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

Ein Thema von kuba · begonnen am 5. Sep 2015 · letzter Beitrag vom 7. Sep 2015
Antwort Antwort
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#1

Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 5. Sep 2015, 01:24
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
Angehängte Dateien
Dateityp: zip proxy.zip (1,7 KB, 11x aufgerufen)
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 5. Sep 2015, 19:07
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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 5. Sep 2015, 19:14
Manchmal ist man einfach zu blöd

if pos('www.google.de',AData) > 0 then exit else raise Exception.Create(''); KUBA
Stefan Kubatzki
E=mc2

Geändert von kuba ( 5. Sep 2015 um 19:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 5. Sep 2015, 23:53
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
Stefan Kubatzki
E=mc2

Geändert von kuba ( 5. Sep 2015 um 23:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 6. Sep 2015, 00:13
Vielleicht wäre es gescheit einen Proxy Cache anzulegen und die gültigen Inhalte daraus zu entnehmen.

Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 6. Sep 2015, 07:45
.. ist das filtern von IP-Adressen nicht eine Aufgabe für eine Firewall?
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 6. Sep 2015, 13:16
.. 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
Stefan Kubatzki
E=mc2

Geändert von kuba ( 6. Sep 2015 um 13:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 6. Sep 2015, 23:12
.. 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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 6. Sep 2015, 23:22
Ü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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Indy HTTPProxyServer nur bestimmte IP-Adresse zulassen

  Alt 7. Sep 2015, 23:49
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

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

KUBA
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 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