Как я могу получить информацию о прокси Mac OS X в скрипте Bash?

13

На моем ноутбуке настроено несколько сетевых расположений: рабочий, домашний и т. Д. На рабочем (ых) компьютере (ах) настроен прокси-сервер, а на остальных нет. Это прекрасно работает для приложений OSX - Safari, Mail, даже Firefox и Thunderbird с плагином System Proxy .

Для терминальных приложений , таких как git, svn, gem, и curlя следующий по моему .bash_profile:

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

Мой вопрос заключается в следующем: есть ли способ заставить экспортированную переменную искать значение из текущего местоположения моей системы? Я бы предпочел, чтобы это делалось динамически (поэтому, если я изменю местоположение во время сеанса терминала, оно изменится), но я был бы рад только тому, который установил его при .bash_profileзапуске (то есть мне пришлось бы начать новый сеанс терминала когда я поменялся местами).

Спасибо!

Джеймс А. Розен
источник
Вот скрипт bash, который использует сетевую настройку

Ответы:

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

Chealion
источник
5
Список всех услуг:networksetup -listallnetworkservices
Арьян
1
Мне нравится идея, но она не работает для меня. Если я это сделаю sudo networksetup -getwebproxy Ethernet, я получу распечатку, а затем ошибку. Я полагаю, что segfault вызывает разрыв трубы, поэтому awkникогда не получит ничего для анализа.
Джеймс А. Розен
Есть ли вывод информации? И это все еще segfault без команд awk?
Chealion
Я думаю, что однажды видел эту ошибку сегментации на моих собственных Маках. У меня нет проблемы на 10.5.8 или 10.6.1 сейчас (оба Intel). Может быть, вы на какой-то другой версии?
Арьян
Я на 10.5.8, и это происходит без awk. При добавлении awk сообщение segfault исчезает. , , наряду со всем другим выходом.
Джеймс А. Розен
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
Стив
источник
2

Кроме того, эта команда может помочь обнаружить другие настройки прокси: scutil --proxy

Brice
источник
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.

jan.vogt
источник