次のようにWebサーバーに直接アクセスしてWebページにアクセスできます。
$ echo "GET /sample" | nc web-server 80
This is contents of /sample...
$
これで、プロキシ設定でFirefoxブラウザを設定し、HTTPプロキシを通過させるように、netcatがSquid HTTPプロキシ(ポート3128でリッスン)を通過できるようにします。
私は成功せずに次のことを試しました。
$ echo "GET /sample" | nc -x squid-proxy:3128 web-server 80
<Seemed to be blocked FOREVER on input, so I killed it.>
<Ctrl-C>
$
注:私は次のオプションを持つnetcatのRHEL 5.3バージョンを使用しています。
$ nc --help
nc: invalid option -- -
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
[-x proxy_address[:port]] [hostname] [port[s]]
マニュアルページからの抜粋nc
:
EXAMPLES
<snip>
Connect to port 42 of host.example.com via an HTTP proxy at 10.2.3.4, port 8080.
This example could also be used by ssh(1); see the ProxyCommand directive in
ssh_config(5) for more information.
$ nc -x10.2.3.4:8080 -Xconnect host.example.com 42
-x
今私はssh / SSLのユースケースではないので、/-X
オプションをどのように使用するのか、それを使用するのかわかりません!
上記の目標を達成する方法が2つ以上ある場合(たとえば、HTTPプロキシを介したnetcatトラフィックのルーティングなど)、すべての方法を共有していただきありがとうございます。
よろしくお願いします。
答え1
Netcatは専用のHTTPクライアントではありません。 Netcatのプロキシサーバーを介して接続することはサーバーを介したTCP接続の作成-x
これは、次のように指定されたパラメータを持つSOCKSまたはHTTPSプロキシが必要な理由です-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
プロキシサーバーを介してSSL(HTTPS)接続を作成する方法を指定します。プロキシは他のエンドポイントではなく接続が暗号化されたエンドポイントであるため、要求を介して許可されているCONNECT
場合は、HTTPプロキシを介してポイントツーポイント接続をトンネリングできます。 (ここでは細部を煩わせるかもしれませんが、それはポイントではありません。「HTTP CONNECT
トンネル」の詳細はこちらからご覧いただけます。)
だから、プロキシを使用してWebサーバーに接続するには、Webブラウザで何をする必要があります。エージェントと話す:
$ nc squid-proxy 3128
GET http://webserver/sample HTTP/1.0
(この質問はこの質問に似ています。proxychain
ここでどのような用途に使用されるのかわかりません。)
付録
ブラウザの使用ノーマル私が知っている限り、SquidのようなHTTPプロキシは、Netcatで示されているように、例で示されているタスクをある程度実行します。通話後、nc
127.0.0.1ポート8080をプロキシとして使用するようにFirefoxを設定し、Open Googleを試しました。出力は次のとおりです(クッキーを除く)。
$ 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
アクションとしてこの方法Netcatを使用してHTTPプロキシを介してHTTPサーバーにアクセスすることもできます。これでHTTPS Webサーバーに接続しようとするとどうなりますか?ブラウザは誰にもトラフィックを公開しないでください。途中でだから、直接接続これが必要ですCONNECT
。再起動してnc -l 8080
アクセスしようとすると(たとえば、https://google.com
プロキシを次に設定)、127.0.0.1:80
結果は次のようになります。
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
CONNECT
要求を行うには、サーバーがgoogle.com
ポート(https)に直接接続する必要があることがわかります443
。 今、この要求の用途は何ですか?
$ nc -X connect -x 127.0.0.1:8080 google.com 443
出力例nc -l 8080
:
CONNECT google.com:443 HTTP/1.0
したがって、同じ方法を使用して直接接続を作成します。ただし、これはほとんどすべての用途(使用などcorkscrew
)に使用できるため、通常、CONNECT
要求は明らかなポートに制限されます。
答え2
socatを見てください。http://www.dest-unreach.org/socat/doc/README