
Netcat(またはSocat)を使用すると、ブラウザと特定のホスト:ポート間のトラフィックを簡単にキャプチャできます。
しかし、Linuxでは、HTTPクライアント(ブラウザまたはコマンドラインプログラム)と任意のホスト:ポート間のトラフィックをキャプチャするために使用できるSquidのHTTPプロキシに対応するコマンドラインはありますか?
答え1
PerlとPython(そしておそらくRuby)には、簡単なHTTPプロキシをすばやく構築するために使用できるシンプルなツールキットがあります。
Perl では、以下を使用します。HTTP::プロキシ。以下は、マニュアルの3行の例です。リクエストやレスポンスをフィルタリング、記録、または書き換えるには、フィルタを追加してください。例については、マニュアルを参照してください。
use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;
Pythonでは、次を使用します。シンプルなHTTPサーバー。以下は少し変更されたサンプルコードです。効果ロボット。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()
答え2
これが最善の解決策ではないかもしれませんが、どのプロキシを使用している場合は特定のプロキシがあるため、host:port
netcatソリューションはまだ機能します。ただし、これを理解するには、プロキシメタデータを解凍する必要があります。
最も簡単な方法は、任意の匿名プロキシを使用し、すべてのトラフィックをnetcat
。 (つまり、ブラウザプロキシを設定しlocalhost:port
た後に実際のプロキシにデータを渡すことです。)
ローカルプロキシが必要な場合は、SOCKS5プロキシがssh -D <port> localhost
最も簡単なオプションです。明らかに、「http」プロキシの代わりに「socks」プロキシを使用するようにブラウザに指示する必要があります。
したがって、次のようになります(ローカルシステムが着信SSH接続を受け入れると仮定します)。
ssh -fN -D 8000 localhost
nc -l 8080 | tee capturefile | nc localhost 8000
もちろん、これは一度のブラウザ接続の試みとシャットダウンにのみ機能し、戻りデータをブラウザに渡そうとしなかったため、完全なnetcat
ソリューションが必要です。