Bagaimana saya bisa mendapatkan informasi proksi Mac OS X dalam skrip Bash?

13

Saya memiliki beberapa lokasi jaringan yang diatur pada laptop saya: Pekerjaan, Rumah, dll. Pekerjaan satu (s) semua memiliki server proxy yang diatur, sedangkan yang lain tidak. Ini berfungsi baik untuk aplikasi OSX - Safari, Mail, bahkan Firefox dan Thunderbird dengan plugin System Proxy .

Untuk aplikasi terminal seperti git, svn, gem, dan curlsaya memiliki berikut di saya .bash_profile:

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

Pertanyaan saya adalah ini: apakah ada cara untuk membuat variabel yang diekspor mencari nilai dari lokasi sistem saya saat ini? Saya lebih suka itu dilakukan secara dinamis (jadi jika saya mengubah lokasi selama sesi terminal itu akan berubah), tapi saya akan senang dengan hanya satu yang mengaturnya ketika .bash_profiledijalankan (artinya saya harus memulai sesi terminal baru ketika saya mengubah lokasi).

Terima kasih!

James A. Rosen
sumber
Berikut ini adalah skrip bash yang menggunakan pengaturan jaringan dan keamanan untuk mengekstrak informasi proksi dan menyetel http_proxy dan https_proxy: gist.github.com/alexargo/4657760

Jawaban:

8

Apa versi Mac OS X? Saya tidak yakin alat ini disertakan dengan Mac OS X 10.4 atau sebelumnya.

networksetupharus menjadi apa yang Anda cari, yaitu sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(mis. sudo networksetup -getwebproxy Airport)

Outputnya keluar seperti ini:

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

Jadi, Anda perlu mengubah output menjadi sesuatu yang dapat digunakan.

Contoh yang benar-benar kasar menggunakan awk beberapa kali (keterampilan awk saya agak mendasar) adalah:

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

Menghasilkan keluaran http://SERVER_ADDRESS:123

Chealion
sumber
6
Daftar semua layanan:networksetup -listallnetworkservices
Arjan
2
Saya suka ide itu, tetapi itu tidak berhasil untuk saya. Jika saya lakukan sudo networksetup -getwebproxy Ethernet, saya mendapatkan hasil cetakan dan kemudian segfault. Saya membayangkan segfault menyebabkan pipa rusak, jadi awktidak pernah mendapatkan apa pun untuk diurai.
James A. Rosen
Apakah ada keluaran informasi? Dan apakah itu masih segfault tanpa perintah awk?
Chealion
Saya pikir saya benar-benar melihat kesalahan segmentasi pada Mac saya sendiri sekali. Saya tidak memiliki masalah pada 10.5.8 atau 10.6.1 sekarang (keduanya Intel). Mungkin Anda menggunakan versi lain?
Arjan
Saya di 10.5.8, dan itu terjadi tanpa awk. Menambahkan awk membuat pesan segfault menghilang. . . bersama dengan semua output lainnya.
James A. Rosen
4

Dalam jawaban di atas , ada komentar dari tlrobinson tentang bagaimana itu tidak termasuk nomor port.

Anda dapat melakukannya dengan mematikan HTTP Proxy Server dengan HTTP Proxy Port

Saya juga melihat ini dilakukan seperti ini:

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

Selain itu perintah ini dapat membantu menemukan pengaturan proxy lainnya: scutil --proxy

Brice
sumber
1

Sepertinya ini berhasil, tapi saya tidak yakin seberapa kuatnya:

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

Ini tidak berfungsi jika Lokasi Anda menggunakan proxy.pacalih - alih lokasi proxy yang dikodekan keras.

James A. Rosen
sumber
Sayangnya ini sepertinya tidak termasuk nomor port.
tlrobinson
0

Anda bisa menggunakan alat kecil yang saya tulis, yang menetapkan variabel lingkungan yang biasa digunakan untuk proksi. Penggunaannya mudah:

  1. Kompilasi dengan xCode.
  2. Menambahkan:

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

    untuk Anda .profile, .bashrcatau .bash_profile.

Setelah itu Anda dapat menggunakan variabel seperti $HTTP_PROXY, $http_proxy, $HttpProxy, dll untuk semua protokol (HTTP, FTP, SOCKS) termasuk $NO_PROXYpengecualian. Ini akan berfungsi untuk sebagian besar alat CLI dan mendapatkan pengaturan dari panel kontrol OS X.

jan.vogt
sumber