netcatに既存のHTTPプロキシを使用させる方法

netcatに既存のHTTPプロキシを使用させる方法

次のように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で示されているように、例で示されているタスクをある程度実行します。通話後、nc127.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要求は明らかなポートに制限されます。

おすすめ記事