Python 製の HTTP プロキシ。インストールすると proxy
コマンドが使えるようになる。
venv 環境内へのインストール手順。
python3 -m venv venv source venv/bin/activate pip install proxy.py
注意点として、デフォルトで IPv6 のポートを listen する。IPv4 のポートは listen しない。curl のように IPv4/IPv6 をよしなに処理してくれる HTTP クライアントでは問題にならず、気付きづらいが、ssh の ProxyCommand + nc でプロキシを通すテストの検証時にはまった。
proxy.py -h --hostname HOSTNAME Default: ::1. Server IP address. --port PORT Default: 8899. Server port.
❯ proxy --port 8080 2021-07-18 02:35:29,204 - pid:74959 [I] load_plugins:334 - Loaded plugin proxy.http.proxy.HttpProxyPlugin 2021-07-18 02:35:29,205 - pid:74959 [I] listen:113 - Listening on ::1:8080 2021-07-18 02:35:29,228 - pid:74959 [I] start_workers:136 - Started 4 workers
curl に IPv4 アドレスのみを解決させる -4, --ipv4
オプションを指定すると、ローカルのプロキシサーバに接続できずエラーになることがわかる。
❯ curl -x localhost:8080 ifconfig.me/ua curl/7.64.1 ❯ curl -4 -x localhost:8080 ifconfig.me/ua curl: (7) Failed to connect to localhost port 8080: Connection refused ❯ curl -6 -x localhost:8080 ifconfig.me/ua curl/7.64.1
ProxyCommand を指定するとエラーになる。おそらく nc がデフォルトで IPv4 アドレスのみを解決するから。
❯ ssh -o ProxyCommand='nc -X connect -x localhost:8080 %h %p' -p 443 -T git@ssh.github.com nc: Proxy error: "HTTP/1.1 200 Connection established" kex_exchange_identification: Connection closed by remote host
❯ proxy --port 8080 2021-07-18 02:38:21,728 - pid:75222 [I] load_plugins:334 - Loaded plugin proxy.http.proxy.HttpProxyPlugin 2021-07-18 02:38:21,729 - pid:75222 [I] listen:113 - Listening on ::1:8080 2021-07-18 02:38:21,750 - pid:75222 [I] start_workers:136 - Started 4 workers ConnectionResetError(54, 'Connection reset by peer')
proxy.py に IPv4 アドレスを bind すると解決する・・・はずなのだが、いま手元で試したらうまくいかない。昨日はうまくいったのに・・・。
❯ proxy --hostname 0.0.0.0 --port 8080