Netcat n'est pas un client HTTP spécialisé. Se connecter via un serveur proxy pour Netcat signifie donc créer une connexion TCP via le serveur , c'est pourquoi il attend un proxy SOCKS ou HTTPS avec l' -x
argument, spécifié par -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.
connect
spécifie une méthode pour créer des connexions SSL (HTTPS) via un serveur proxy. Étant donné que le proxy n'est pas l'autre point de terminaison et que la connexion est chiffrée par point de terminaison, une CONNECT
demande vous permet de tunneler une connexion point à point via un proxy HTTP (si cela est autorisé). (Je vais peut-être passer sous silence les détails ici, mais ce n'est pas le point important de toute façon; les détails sur le " HTTP CONNECT
tunneling" ici )
Donc , pour vous connecter à votre serveur Web à l'aide d'un proxy, vous devrez faire ce que le navigateur Web ferait - parler au proxy :
$ nc squid-proxy 3128
GET http://webserver/sample HTTP/1.0
( Cette question a des similitudes avec celle-ci; je ne sais pas si elle proxychain
est utile ici. )
Addendum
Un navigateur utilisant un proxy HTTP ordinaire , par exemple Squid (tel que je le connais), fait plus ou moins ce que l'exemple illustré, comme Netcat peut vous le montrer: après l' nc
appel, j'ai configuré Firefox pour utiliser le port 8080 127.0.0.1 comme proxy et a essayé d'ouvrir google, voici ce qui a été sorti (moins un cookie):
$ 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
En agissant de cette manière également, vous pouvez utiliser Netcat pour accéder à un serveur HTTP via le proxy HTTP. Maintenant, que devrait-il se passer si vous essayez d'accéder à un serveur Web HTTPS? Le navigateur ne doit sûrement pas révéler le trafic à quiconque au milieu , donc une connexion directe est nécessaire; et c'est là CONNECT
qu'entre en jeu. Lorsque je recommence nc -l 8080
et que j'essaie d'accéder, disons, https://google.com
avec le proxy défini sur 127.0.0.1:80
, voici ce qui sort:
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
Vous voyez, la CONNECT
demande demande au serveur une connexion directe à google.com
, port 443
(https). Maintenant , que fait cette demande?
$ nc -X connect -x 127.0.0.1:8080 google.com 443
La sortie de l' nc -l 8080
instance:
CONNECT google.com:443 HTTP/1.0
Il utilise donc la même manière pour créer une connexion directe. Cependant, comme cela peut bien sûr être exploité pour presque n'importe quoi (en utilisant par exemple corkscrew
), les CONNECT
demandes sont généralement limitées aux ports évidents uniquement.
0.1
pour masquer mon ignorance.:)
nc
Firefox clarifie-t-il un peu les choses?nc squid-proxy 3128
suiviGET http://webserver/sample HTTP/1.0
, mais j'ai obtenu un HTTP / 1.0 403 Interdit (erreur d'accès refusé).:)
Vous pouvez probablement utilisertcpdump
ouwireshark
pour exploiter votre propreCONNECT
connexion et obtenir des informations ...Jetez un œil à socat: http://www.dest-unreach.org/socat/doc/README
la source
echo "GET /sample HTTP/1.0" | socat PROXY:squid-proxy:web-server:80,proxyport=3128 STDIN
, mais nous avons eu cette erreur:2012/05/17 06:56:23 socat[3135] E CONNECT web-server:80: Forbidden
. Maintenant, juste pour voir si j'ai bien compris cet outil, j'ai ensuite essayé l'utilisation de base non proxy:,echo "GET /sample HTTP/1.0" | socat TCP4:web-server:80 STDIN
mais je n'ai reçu aucune réponse! Donc, évidemment, il me manque quelque chose ici dans l'utilisation de socat. Je vous serais reconnaissant de bien vouloir signaler mon erreur.STDIO
(ou,-
) au lieu deSTDIN
. Mais la version proxy me donne toujours la même erreur.echo "GET http://web-server/sample" | socat - TCP:squid-proxy:3128
et cela a fonctionné. Confirmez-vous si c'est ainsi que je suis censé utilisersocat
(au lieu de laPROXY:...
spécification d'adresse)?