Як я можу отримати інформацію про проксі для 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, який використовує networksetup та безпеку для отримання інформації про проксі і встановлення http_proxy та https_proxy: gist.github.com/alexargo/4657760

Відповіді:


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
Ар'ян,

2
Мені подобається ідея, але вона не працює для мене. Якщо я це просто роблю sudo networksetup -getwebproxy Ethernet, я отримую роздруківку, а потім сегмент за замовчуванням. Я думаю, що segfault призводить до розриву труби, тому awkніколи нічого не отримує для розбору.
Джеймс А. Росен

Чи є якийсь інформаційний вихід? І чи все ще він сегментарно без команд awk?
Chealion

Я думаю, що я справді колись бачив цю сегментацію на власних Macs. Зараз у мене немає проблеми з 10.5.8 або 10.6.1 (обидва Intel). Можливо, ви на якійсь іншій версії?
Ар'ян

Я на 10.5.8, і буває без цього awk. Додавання awk змушує повідомлення про сегментації зникнути. . . разом з усіма іншими результатами.
Джеймс А. Росен

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.