
Ich kenne mich also mit grundlegenden Proxys aus und weiß, wie sie die Verbindung transparent zum Ziel weiterleiten. Ich konnte nur nicht verstehen, wie das Verketten von Proxys funktioniert.
Ich habe zum Beispiel diese Kette: proxy1 -> proxy2 -> proxy3 -> proxy4 -> destination
.
Wie bei normalen einzelnen Proxys wird unsere Anfrage an den Proxy gesendet, der sie dann an das Ziel weiterleitet und die Antwort zurücksendet. Aber woher weiß der bei der Proxy-Verkettung, proxy1
dass er die Anfrage an weiterleiten muss proxy2
usw., anstatt sie direkt an das Ziel weiterzuleiten?
Liegt es an einer Art Header in den Anfragen, die wir an die Proxy-Kette senden, die den Proxys entsprechend mitteilen, die Anfragen an den nächsten Proxy weiterzuleiten?
Antwort1
Ich denke, es geht umdie HTTP-Methode „CONNECT“.
Bei diesem Mechanismus fordert der Client einen HTTP-Proxyserver auf, die TCP-Verbindung an das gewünschte Ziel weiterzuleiten. Der Server stellt dann die Verbindung im Namen des Clients her. Sobald die Verbindung vom Server hergestellt wurde, leitet der Proxyserver den TCP-Stream weiterhin zum und vom Client weiter. Beachten Sie, dass nur die anfängliche Verbindungsanforderung HTTP ist – danach leitet der Server einfach die hergestellte TCP-Verbindung weiter.
Der letzte Satz ist der Schlüssel.Sie fordern an proxy1
, die Verbindung per Proxy zu proxy2
. Dann geht alles, was folgt, an proxy2
durch proxy1
, das nicht mehr interpretiert, also fordern Sie an, an zu Proxy zu gehen, proxy3
und diese Anfrage wird abgefangen und von interpretiert proxy2
. Die nächste CONNECT-Anfrage (an Proxy zu proxy4
) geht durch proxy1
und proxy2
, sie wird von interpretiert proxy3
– und so weiter. Jeder Proxy in der Kette interpretiertgenau eineCONNECT-Anfrage, dann wird es transparent.
Nachdem alle Proxys durch die Abfolge der ersten Pakete ordnungsgemäß eingerichtet sind, kann alles, was eine bidirektionale TCP-Verbindung verwendet, durch den CONNECT-Tunnel geleitet werden.
Beachten Sie, dass
Nicht alle HTTP-Proxyserver unterstützen diese Funktion und selbst die, die es tun, können das Verhalten einschränken.
Letzter Hinweis: Beim Experimentieren kann es zu Problemen beim Verketten von Proxys kommen, wenn das von Ihnen ausgeführte Programm GET statt CONNECT verwendet. GET erlaubt keine Verkettung, dies wird behandeltHier. Ihre Verwirrung hinsichtlich der Proxy-Verkettung kann darauf zurückzuführen sein, dass Sie mit dem GET-Mechanismus besser vertraut sind (d. h. in Bezug auf diesen denken).