Mac OS Xのプロキシ情報をBashスクリプトで取得するにはどうすればよいですか?


13

私のラップトップには複数のネットワークロケーションが設定されています。職場、自宅などです。職場にはすべてプロキシサーバーが設定されていますが、他のサーバーには設定されていません。これは、OSXアプリケーション(Safari、Mail、Firefox、System Proxyプラグイン付きのThunderbirdでも)で正常に機能します。

などの端末アプリケーションではgitsvngemと、curl私は私の中で次のようしています.bash_profile

export HTTP_PROXY='http://proxy.mycompany.com:80'
export http_proxy=$HTTP_PROXY

私の質問はこれです:エクスポートされた変数にシステムの現在の場所から値を検索させる方法はありますか?私はそれを動的に行うことを望みます(したがって、ターミナルセッション中に場所を変更すると変更されます)が、.bash_profile実行時に設定したものだけで満足です(つまり、新しいターミナルセッションを開始する必要があることを意味します)場所を変更したとき)。

ありがとう!


networksetupとセキュリティを使用してプロキシ情報を抽出し、http_proxyとhttps_proxyを設定するbashスクリプトを次に示します。gist.github.com

回答:


8

Mac OS Xのバージョンは何ですか?このツールはMac OS X 10.4以前に含まれているとは思いません。

networksetupつまり、sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(たとえば、sudo networksetup -getwebproxy Airport)を探しているはずです

出力は次のようになります。

Enabled: Yes
Server: SERVER_ADDRESS
Port: 123
Authenticated Proxy Enabled: 0 for false, 1 for true

そのため、出力を使用可能なものに変換する必要があります。

awkを数回使用する非常に粗雑な例(私のawkスキルはかなり基本的です)は次のようになります。

sudo networksetup -getwebproxy Airport | awk {'print $2'} | awk {'getline l2; getline l3; print "http://"l2":"l3'} | head -n 1

出力結果 http://SERVER_ADDRESS:123


6
すべてのサービスのリスト:networksetup -listallnetworkservices
Arjan

2
私はこのアイデアを気に入っていますが、私にはうまくいきません。私がちょうどそうするならばsudo networksetup -getwebproxy Ethernet、私は印刷物とセグメンテーション違反を得る。segfaultがパイプを破損させるのでawk、解析するものは何もありません。
ジェームズA.ローゼン

出力される情報はありますか?そして、それはまだawkコマンドなしでセグメンテーション違反ですか?
Chealion

私は実際に自分のMacで一度そのセグメンテーション違反を見たと思う。私は10.5.8または10.6.1(両方ともIntel)では現在問題を抱えていません。他のバージョンを使用している可能性がありますか?
アルジャン

私は10.5.8を使用していますが、それはなしで発生しawkます。awkを追加すると、セグメンテーション違反メッセージが消えます。。。他のすべての出力とともに。
ジェームズA.ローゼン

4

上記回答では、tlrobinsonからポート番号が含まれない方法についてのコメントがあります。

HTTPプロキシポートを使用してHTTPプロキシサーバーを切り替えることで、これを実行できます。

私はこれが次のように行われるのを見ました:

system_profiler SPNetworkDataType | grep "HTTP Proxy Server" | awk '{print $4}' | head -1
system_profiler SPNetworkDataType | grep "HTTP Proxy Port" | awk '{print $4}' | head -1

3

さらに、このコマンドは他のプロキシ設定を検出するのに役立つ場合があります。 scutil --proxy


1

以下はうまくいくように見えますが、どれほど堅牢かはわかりません:

system_profiler SPNetworkDataType|grep "HTTP Proxy Server"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'}

場所がproxy.pacハードコードされたプロキシの場所の代わりにを使用している場合は機能しません。


残念ながら、これにはポート番号が含まれていないようです。
tlrobinson

0

私が書いた小さなツールを使用して、プロキシに一般的に使用される環境変数を設定できます。使い方は簡単です:

  1. xCodeでコンパイルします。
  2. 追加:

    eval `./path/to/export-proxies`

    あなたに.profile.bashrcまたは.bash_profile

その後は次のような変数を使用することができ$HTTP_PROXY$http_proxy$HttpProxyなど、すべてのプロトコル(HTTP、FTP、SOCKS)のためなど、$NO_PROXY例外。これはほとんどのCLIツールで機能し、OS Xコントロールパネルから設定を取得します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.