web-dev-qa-db-ja.com

コマンドラインの汎用HTTPプロキシ(Squidなど)はありますか?

Netcat(またはSocat)を使用して、ブラウザーと特定のHost:port間のトラフィックを簡単にキャプチャできます。

しかしLinuxの場合、HTTPクライアント(ブラウザまたはコマンドラインプログラムのいずれか)と任意のHost:portの間のトラフィックをキャプチャするために使用できるSquidのようなHTTPプロキシに相当するコマンドラインはありますか?

9
Harry

PerlとPython(そしておそらくRubyも同様))には、単純なHTTPプロキシをすばやく構築するために使用できる単純なキットがあります。

Perlでは、 HTTP :: Proxy を使用します。これは、ドキュメントの3行の例です。フィルタを追加して、リクエストまたはレスポンスをフィルタリング、ログ記録、または書き換えます。例については、ドキュメントを参照してください。

use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;

Pythonでは、 SimpleHTTPServer を使用します。 effbot から軽く変更したサンプルコードを以下に示します。 do_GETメソッド(またはその他)を使用して、要求または応答をフィルタリング、ログ記録、または書き換えます。

import SocketServer
import SimpleHTTPServer
import urllib
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen(self.path), self.wfile)
httpd = SocketServer.ForkingTCPServer(('', 3128), Proxy)
httpd.serve_forever()

これは最善の解決策ではないかもしれませんが、anyプロキシを使用すると、特定のHost:portが含まれるため、プロキシを分離する必要がありますが、netcatソリューションは引き続き機能します。それを理解するためのメタデータ。

これを行う最も簡単な方法は、ランダムな匿名化プロキシを使用し、netcatを介してすべてのトラフィックをチャネリングすることです。 (つまり、ブラウザのプロキシをlocalhost:portに設定してから、データを実際のプロキシに転送します)。

ローカルプロキシが必要な場合は、ssh -D <port> localhostを使用したSOCKS5プロキシがおそらく最も簡単なオプションです。明らかに、「http」プロキシではなく「socks」プロキシを使用するようにブラウザに指示する必要があります。

したがって、次のようなものです(ローカルマシンが着信SSH接続を受け入れる場合):

ssh -fN -D 8000 localhost
nc -l 8080 | tee capturefile | nc localhost 8000

当然、これは1回のブラウザ接続試行でのみ機能し、その後終了します。返されたデータをブラウザに転送しようとしたわけではないため、完全なnetcatソリューションが必要です。

6
ams