コマンドライン、一般的なHTTPプロキシ(例:Squid)はありますか?

コマンドライン、一般的なHTTPプロキシ(例:Squid)はありますか?

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:portnetcatソリューションはまだ機能します。ただし、これを理解するには、プロキシメタデータを解凍する必要があります。

最も簡単な方法は、任意の匿名プロキシを使用し、すべてのトラフィックを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ソリューションが必要です。

答え3

https://mitmproxy.org/

一例:

mitmdump  --ssl-insecure --mode reverse:google.com

関連情報