Netcat ist kein spezialisierter HTTP-Client. Das Herstellen einer Verbindung über einen Proxyserver für Netcat bedeutet daher, dass eine TCP-Verbindung über den Server hergestellt wird. Aus diesem Grund wird ein SOCKS- oder HTTPS-Proxy mit dem folgenden -xArgument erwartet -X:
-X proxy_protocol
Requests that nc should use the specified protocol when talking
to the proxy server. Supported protocols are “4” (SOCKS v.4),
“5” (SOCKS v.5) and “connect” (HTTPS proxy). If the protocol is
not specified, SOCKS version 5 is used.
connectGibt eine Methode zum Erstellen von SSL-Verbindungen (HTTPS) über einen Proxyserver an. Da der Proxy nicht der andere Endpunkt ist und die Verbindung endpunktweise verschlüsselt ist, CONNECTkönnen Sie mit einer Anforderung eine Punkt-zu-Punkt-Verbindung über einen HTTP-Proxy tunneln (sofern dies zulässig ist). (Ich beschönige hier vielleicht Details, aber es ist sowieso nicht der wichtige Punkt; Details zum " HTTP CONNECTTunneln" hier )
Also , auf den Webserver zu verbinden , einen Proxy verwenden, müssen Sie tun , was der Web - Browser tun würde - sprechen Sie mit dem Proxy :
$ nc squid-proxy 3128
GET http://webserver/sample HTTP/1.0
( Diese Frage hat Ähnlichkeiten mit dieser; ich weiß nicht, ob sie proxychainhier von Nutzen ist. )
Nachtrag
Ein Browser, der einen normalen HTTP-Proxy verwendet, z. B. Squid (wie ich ihn kenne), macht mehr oder weniger das, was das Beispiel zeigt, wie Netcat Ihnen zeigen kann: Nach dem ncAufruf habe ich Firefox so konfiguriert, dass 127.0.0.1 Port 8080 als Proxy verwendet wird und versucht, Google zu öffnen, wurde Folgendes ausgegeben (abzüglich eines Cookies):
$ nc -l 8080
GET http://google.com/ HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
DNT: 1
Proxy-Connection: keep-alive
Auf diese Weise können Sie auch Netcat verwenden, um über den HTTP-Proxy auf einen HTTP-Server zuzugreifen. Was sollte nun passieren, wenn Sie versuchen, auf einen HTTPS-Webserver zuzugreifen? Der Browser sollte den Datenverkehr sicherlich niemandem in der Mitte offenlegen , daher ist eine direkte Verbindung erforderlich. und hier CONNECTkommt ins Spiel. Wenn ich erneut starte nc -l 8080und versuche, beispielsweise https://google.commit eingestelltem Proxy auf etwas zuzugreifen, 127.0.0.1:80kommt Folgendes heraus:
CONNECT google.com:443 HTTP/1.1
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Proxy-Connection: keep-alive
Host: google.com
Sie sehen, die CONNECTAnforderungen fordern den Server auf, eine direkte Verbindung zum google.comPort 443(https) herzustellen . Nun , was macht diese Anforderung?
$ nc -X connect -x 127.0.0.1:8080 google.com 443
Die Ausgabe der nc -l 8080Instanz:
CONNECT google.com:443 HTTP/1.0
Auf die gleiche Weise wird also eine direkte Verbindung hergestellt. Da dies natürlich für fast alles ausgenutzt werden kann (z. B. mit corkscrew), sind CONNECTAnforderungen normalerweise nur auf die offensichtlichen Ports beschränkt.