現在、すべてのトラフィックをsshトンネル経由で転送しています。
ssh -ND 8080 user@remote-machine
そして、システムのsocks5プロキシを(ネットワークセクションのシステム設定で)127.0.0.1:8080
に設定しました。すべて正常に動作し、Google Chromeおよびその他のプログラムは想定どおりにソックスプロキシを使用しています。
問題は、curl
(端末で使用するか、PHP
で使用するか)を使用しようとするときに発生します。私が得るものはこれです:
user@laptop:~$ curl -v google.com
* About to connect() to proxy 127.0.0.1 port 8080 (#0)
* Trying 127.0.0.1... connected
> GET HTTP://google.com HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: google.com
> Accept: */*
> Proxy-Connection: Keep-Alive
>
* Empty reply from server
* Connection #0 to Host 127.0.0.1 left intact
curl: (52) Empty reply from server
* Closing connection #0
グーグルで検索しようとしましたが、関連するものが見つかりませんでした。では、システムプロキシ(存在する場合)でcurlを機能させるにはどうすればよいですか?私は常にプロキシを使用したいとは限らないので、両方のケース(プロキシとプロキシなし)で機能するエイリアスを設定できるようにしたいと思います。
HTTPプロキシの場合、-x
を使用します。
$HOME/.curlrc
を持っている
-x 127.0.0.1:8080
または、プロキシ使用のためにcurl -x 127.0.0.1:8080 ...
を使用してエイリアスを作成します。
SOCKSプロキシの場合、man curl
を見ると次のようになります。
--socks5 <Host[:port]> Use the specified SOCKS5 proxy - but resolve the Host name locally. If the port number is not specified, it is assumed at port 1080. This option overrides any previous use of -x, --proxy, as they are mutually exclusive.
したがって、curl --socks5 127.0.0.1:8080
を使用してください。 curl --socks5 $socks_proxy
。