Wie genau funktioniert ein Proxy?


12

Wenn ich eine Verbindung herstellen möchte, z. B. IP 100.100.100.100, Port 80, sendet mein Computer ein TCP-Paket mit dieser Adresse an das Kabel.

Wenn ich einen Proxyserver verwende, z. B. 200.200.200.200 Port 8080 (eine solche Art von Proxy, die Sie im Internet Explorer einrichten können), wie wird dieser Prozess geändert?

Wenn ich immer noch eine Verbindung zu derselben IP herstellen möchte, enthält der IP-Header die Ziel-IP oder die Proxy-IP oder beides?

Ich habe bereits gegoogelt, es gibt Hunderte von Seiten, auf denen Sie erfahren, wie Sie einen Proxy einrichten, aber keine erklärt, wie er unter der Haube funktioniert.

Antworten:


13

Die HTTP-Anforderung wird vom Client an Port 8080 des Proxyservers gesendet. Der Proxyserver erstellt dann eine neue HTTP-Anforderung an den Zielstandort. Abhängig von der Konfiguration fügt der Proxy der HTTP-Anforderung häufig einen "X-Forwarded-For" -Header hinzu. Die Protokolldateien auf der Zielwebsite zeigen die IP-Adresse des Proxys an, können jedoch so konfiguriert sein, dass sie die "X-Forwarded-For" -Adresse protokollieren.

Dies ist die typische Konfiguration, aber die Proxy-Software ermöglicht Ihnen alle Arten von Anpassungen.

BEARBEITEN: Ich sollte beachten, dass ich beim ursprünglichen Lesen Ihrer Frage auf die Idee kam, dass Sie speziell nach einem HTTP-Proxy wie Squid oder Nginx gefragt haben. Es gibt viele verschiedene Arten von Proxys. In Internet Explorer verwenden Sie höchstwahrscheinlich einen HTTP-Proxy, es gibt jedoch auch viele andere Typen.


Ja, es hängt sehr stark von der Software ab, die Sie als Proxyserver verwenden, und davon, wie sie konfiguriert ist. Siehe z. B. das HttpProxyModule für Nginx: wiki.nginx.org/HttpProxyModule
entropo

3
Wenn die Anforderung nur an den Proxyserver gesendet wird, woher weiß der Proxy, mit welcher Zieladresse ich eine Verbindung herstellen möchte? Funktioniert der Proxy auf http-Ebene oder auf TCP-Ebene?
Cody

Der Browser, der die Anforderung an den Proxy sendet, fordert den vollständigen URI an. Der Proxyserver führt dann die DNS-Suche durch und erstellt eine eigene HTTP-Anforderung an den Zielstandort.
Emgee

1
Ein http-Proxy wie Squid (auf den ich meine Antwort gestützt habe) funktioniert auf der Anwendungsebene.
Emgee

1
@emgee: Das HTTP-Protokoll verfügt auch über eine CONNECT-Methode, sodass eine Verbindung über einen HTTP-Proxy zu einem TCP-Server möglich ist (sofern der Proxy dies zulässt) und der TCP-Server kein Server sein muss, der HTTP spricht.
vtest

2

HTTP ist ein Layer 7-Protokoll, also nicht verwirren. Wenn Sie einen HTTP-Proxy verwenden und "google.com" eingeben, ist der HTTP-Header immer noch derselbe wie "google.com". Die Ziel-IP-Adresse ist jedoch die IP-Adresse des Proxys. Die Quelle ist "Hosts IP" für die angepasste Portnummer 8080.


1

Um einen HTTP-Proxy zu verwenden, wird die Anforderung vom Client an die IP-Adresse des Proxyservers und nicht an den Zielserver gesendet. Der Proxy muss dann den HTTP-Header lesen , um den Anforderungs-URI zu extrahieren . Der Anforderungs-URI enthält den Namen oder die IP des Zielservers, und der Proxyserver verwendet diese Informationen, um die Anforderung weiterzuleiten.

Die HTTP-Spezifikation ermöglicht es der Anforderungszeile, den Servernamen und den Port auszuschließen, wenn kein Proxy verwendet wird (da diese nicht erforderlich wären, wenn die Anforderung direkt an diesen Server gesendet würde). Aber gemäß der Spezifikation ...

Das absoluteURI-Formular ist erforderlich, wenn die Anfrage an einen Proxy gestellt wird.

Wenn Sie also keinen Proxy verwenden, sieht die Anforderungszeile möglicherweise folgendermaßen aus:

GET /robots.txt HTTP/1.1

Um jedoch einen Proxy zu verwenden, muss die Zeile den Servernamen (und den Port, wenn nicht 80) enthalten:

GET http://httpbin.org:80/robots.txt HTTP/1.1

Die Antwortseite, wenn die Operation einfacher sein kann, da der Proxyserver die wörtliche Antwort einfach über den zuvor festgelegten Anforderungssocket weiterleiten kann.


Aus "HTTP The Definitive Guide", S. 145: "Für HTTP / 1.1 müssen Server jetzt vollständige URIs sowohl für Proxy- als auch für Serveranforderungen verarbeiten. In der Praxis akzeptieren viele bereitgestellte Server jedoch nur teilweise URIs."
Nobar

Dies ist nicht der Standardansatz, aber ein Proxy kann den HostHeader möglicherweise auch zum Vervollständigen eines Teil-URI verwenden, wenn in der Anforderungszeile kein absoluter URI angegeben ist.
Nobar

Dieser Ansatz kann nicht funktionieren, wenn die Verbindung Ende-zu-Ende-verschlüsselt (HTTPS) ist. security.stackexchange.com/questions/101721/…
Nobar

-7

Es gibt kein "TCP-Paket". TCP arbeitet mit Datenströmen. Es gibt IP-Pakete.

Es scheint Ihnen an Grundkenntnissen über das Networking zu mangeln. Ich empfehle Ihnen, ein gutes Buch über TCP / IP zu erhalten. Jeder Favorit scheint "TCP / IP illustriert" von W. Richard Stevens zu sein.

Zurück zu Ihrer Frage.

Ein Proxy ist ein Mittelsmann:

[Sie] - [Proxy] - [Server, den Sie verbinden möchten]

Jetzt gibt es zwei verschiedene Verbindungen:

[Sie] - (Ihre Verbindung zum Proxy) - [Proxy] - (Verbindung des Proxys zum Server) - [Server, den Sie verbinden möchten]

Wenn Sie glauben, über einen Proxy eine Verbindung zu einem Server herzustellen, stellen Sie tatsächlich eine Verbindung zum Proxy her und teilen ihm mit, dass Sie einen bestimmten Server erreichen möchten. Dann öffnet der Proxy eine zweite Verbindung von sich selbst zu diesem Server und fungiert als Vermittler, der Daten in beide Richtungen weiterleitet.


13
Ein TCP-Paket ist ein IP-Paket mit TCP-Header-Informationen. Dies ist eine gängige Sprache. Bitte sei nicht so herablassend unhöflich; es reflektiert dich nur schlecht, da du gleichzeitig auch falsch liegst.
Phil P
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.