Frage

ich heruntergeladen habe Privoxy paar Wochen und für den Spaß, den ich war neugierig, wie eine einfache Version von ihm getan werden kann.

Ich verstehe, dass ich den Browser (Client) senden Anfrage an den Proxy zu konfigurieren. Der Proxy die Anforderung an den Web senden (lassen Sie sagen, es ist eine HTTP-Proxy). Der Proxy wird die Antwort erhalten ... aber wie kann der Proxy die Anforderung an den Browser (Client) zurückschicken?

Ich habe im Internet für C # und HTTP-Proxy suchen haben, aber nicht etwas gefunden, das lassen Sie mich wissen, wie es hinter den Kulissen arbeitet korrekt. (Ich glaube, ich habe keine Reverse-Proxy will, aber ich bin mir nicht sicher).

Hat jemand von euch eine Erklärung oder ein paar Informationen, die ich weiterhin dieses kleine Projekt lassen?

Update

Das ist, was ich verstehe (siehe Grafik unten).

Schritt 1: I konfigurieren Sie den Client (Browser) für alle Anforderung der Proxy hört im Hafen zu 127.0.0.1 schicken werden. Auf diese Weise werden Anfrage an das Internet gesendet werden, nicht direkt, sondern wird durch den Proxy verarbeitet werden.

Schritt 2 Der Proxy eine neue Verbindung sehen, die die HTTP-Header lesen und den Wunsch zu sehen, die er ausführt, muss. Er führt die Anfrage aus.

Schritt 3: Der Proxy erhält eine Antwort von der Anfrage. Nun muss er die Antwort aus dem Internet an den Client senden, aber wie ???

alt text

Nützlicher Link

Mentalis Proxy : Ich habe dieses Projekt gefunden, dass ein Proxy (aber mehr dass ich möchte). Ich könnte die Quelle überprüfen, aber ich wollte wirklich etwas Grundsätzliches, um mehr das Konzept zu verstehen.

ASP Proxy : Ich könnte in der Lage sein, einige Informationen zu bekommen hier auch .

Git Hub Repository mit einem einfachen HTTP-Proxy .

War es hilfreich?

Lösung

können Sie bauen eine mit der HttpListener Klasse hört auf eingehende Anfragen und der HttpWebRequest Klasse Relais die Anfragen.

Andere Tipps

würde ich nicht verwenden Httplistener oder so etwas, auf diese Weise werden Sie über so viele Fragen kommen.

Am wichtigsten wird es ein großer Schmerz zu Unterstützung sein:

  • Proxy-Keep-Alives
  • SSL wird nicht funktionieren (auf korrekte Art und Weise, werden Sie Popups bekommen)
  • .NET-Bibliotheken streng folgt RFCs, die einige Anfragen fehlschlagen (obwohl IE, FF und anderer Browser der Welt funktionieren.)

Was Sie tun müssen, ist:

  • Hören Sie einen TCP-Port
  • Analysieren Sie die Browser-Anfrage
  • Extract Host diesen Host in TCP-Ebene verbinden
  • Weiterleiten alles hin und her, wenn Sie benutzerdefinierte Header etc hinzufügen möchten.

Ich schrieb 2 verschiedene HTTP-Proxies in .NET mit unterschiedlichen Anforderungen und ich kann Ihnen sagen, dass dies der beste Weg ist, es zu tun.

Mentalis dies zu tun, aber ihr Code ist "delegieren Spaghetti", schlimmer als GoTo:)

Ich habe vor kurzem ein geringes Gewicht Proxy in c # .net mit TcpListener und TcpClient .

https://github.com/titanium007/Titanium-Web-Proxy

Es unterstützt die sichere HTTP die richtige Art und Weise, muss Client-Rechner durch den Proxy verwendet Root-Zertifikat vertrauen. Auch unterstützt WebSockets Relais. Alle Funktionen von HTTP 1.1 sind außer Pipelining unterstützt. Pipelining ist ohnehin nicht von den meisten modernen Browsern verwendet. Auch unterstützt die Windows-Authentifizierung (plain, verdauen).

Sie können Ihre Anwendung anschließen durch das Projekt Referenzierung und dann sehen, und die gesamten Datenverkehr ändern. (Request und Response).

Soweit Leistung, habe ich es auf meinem Rechner getestet und funktioniert ohne merkliche Verzögerung.

Proxy kann auf folgende Art und Weise arbeiten.

Schritt 1, konfigurieren Client proxyhost verwenden:. Proxy

Proxy ist ein TCP-Server, der auf proxyhost hört: proxy. Browser öffnet Verbindung mit Proxy und sendet HTTP-Anforderung. Proxy analysiert diese Anforderung und versucht, „Host“ Header zu erkennen. Dieser Header wird zeigen, Proxy, wo die Verbindung zu öffnen.

Schritt 2: Proxy öffnet Verbindung zu der Adresse im Feld „Host“ Header angegeben. Dann sendet sie HTTP-Anforderung an diesen Remote-Server. Liest Antwort.

Schritt 3: Nachdem Antwort von Remote-HTTP-Server gelesen wird, sendet Proxy die Antwort durch eine früheren geöffnet TCP-Verbindung mit Browser

.

Schematisch wird es wie folgt aussehen:

Browser                            Proxy                     HTTP server
  Open TCP connection  
  Send HTTP request  ----------->                       
                                 Read HTTP header
                                 detect Host header
                                 Send request to HTTP ----------->
                                 Server
                                                      <-----------
                                 Read response and send
                   <-----------  it back to the browser
Render content

Wenn Sie gerade suchen, um den Datenverkehr abzufangen, können Sie den Fiedler Kern verwenden einen Proxy zu erstellen ...

http://fiddler.wikidot.com/fiddlercore

run Fiedler zuerst mit der Benutzeroberfläche, um zu sehen, was es tut, es ist ein Proxy, dass Sie den http / https-Verkehr debuggen kann. Es ist in C # geschrieben und hat einen Kern, die Sie in Ihre eigenen Anwendungen erstellen können.

Beachten Sie FiddlerCore ist nicht frei für kommerzielle Anwendungen.

Socks4 ist ein sehr einfaches Protokoll zu implementieren. Sie hören für die erste Verbindung, eine Verbindung mit dem Host / Port, die vom Client angefordert wurde, den Erfolgscode an den Client sendet dann die abgehenden und ankommende Ströme über Sockets übermitteln.

Wenn Sie mit HTTP gehen werden Sie lesen und möglicherweise eingestellt / einige HTTP-Header entfernen, so dass ein wenig mehr Arbeit ist.

Wenn ich mich richtig erinnere, wird SSL arbeiten über HTTP und Socks-Proxies. Für einen HTTP-Proxy Sie die CONNECT-Verb implementieren, die ähnlich wie die socks4 arbeitet, wie oben beschrieben, dann öffnet der Client die SSL-Verbindung über den Proxy TCP-Stream.

Der Browser zu dem Proxy verbunden ist, so dass die Daten, die die Proxy von dem Web-Server wird nur über die gleiche Verbindung gesendet wird, dass der Browser auf den Proxy initiiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top