Como posso obter as informações de proxy do Mac OS X em um script Bash?


13

Eu tenho vários locais de rede configurados no meu laptop: Trabalho, Casa, etc. Todos os profissionais têm um servidor proxy configurado, enquanto os outros não. Isso funciona bem para aplicativos OSX - Safari, Mail, até Firefox e Thunderbird com o plugin System Proxy .

Para aplicações de terminais, tais como git, svn, gem, e curleu tenho o seguinte no meu .bash_profile:

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

Minha pergunta é a seguinte: existe alguma maneira de fazer a variável exportada procurar o valor da localização atual do meu sistema? Eu preferiria que fosse feito dinamicamente (por isso, se eu mudar de local durante uma sessão de terminal, ele mudará), mas ficaria feliz com apenas uma que o definisse quando .bash_profileexecutada (o que significa que eu teria que iniciar uma nova sessão de terminal quando mudei de local).

Obrigado!


Aqui está um script bash que usa configuração e segurança de rede para extrair as informações de proxy e definir http_proxy e https_proxy: gist.github.com/alexargo/4657760

Respostas:


8

Qual versão do Mac OS X? Não tenho certeza de que a ferramenta esteja incluída no Mac OS X 10.4 ou anterior.

networksetupdeve ser o que você está procurando, a saber sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(por exemplo: sudo networksetup -getwebproxy Airport)

A saída é a seguinte:

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

Então, você precisará converter a saída em algo utilizável.

Um exemplo realmente grosseiro usando o awk algumas vezes (minhas habilidades no awk são bastante básicas) seria:

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

Resultados em uma saída http://SERVER_ADDRESS:123


6
Uma lista de todos os serviços:networksetup -listallnetworkservices
Arjan

2
Adoro a ideia, mas não funciona para mim. Se eu fizer sudo networksetup -getwebproxy Ethernet, recebo a impressão e, em seguida, um segfault. Imagino que o segfault faça com que o cano se quebre, para que awknunca haja nada para analisar.
James A. Rosen

Existe alguma saída de informação? E isso ainda ocorre sem os comandos do awk?
Chealion 29/09/09

Eu acho que vi essa falha de segmentação em meus próprios Macs uma vez. Eu não tenho o problema no 10.5.8 ou 10.6.1 agora (ambos Intel). Talvez você esteja em alguma outra versão?
Arjan

Estou no 10.5.8, e isso acontece sem o awk. Adicionar o awk faz com que a mensagem segfault desapareça. . . junto com todas as outras saídas.
James A. Rosen

4

Na resposta acima , há um comentário do tlrobinson sobre como ele não inclui o número da porta.

Você pode fazer isso alternando o Servidor Proxy HTTP com a Porta Proxy HTTP

Eu também vi isso feito assim:

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

Além disso, este comando pode ajudar a descobrir outras configurações de proxy: scutil --proxy


1

O seguinte parece funcionar, mas não tenho certeza de quão robusto é:

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

Não funcionará se o seu local usar um proxy.paclocal de proxy codificado em vez de codificado.


Infelizmente, isso não parece incluir o número da porta.
tlrobinson

0

Você poderia usar a pequena ferramenta que escrevi, que define as variáveis ​​de ambiente comumente usadas para proxies. O uso é direto:

  1. Compile com xCode.
  2. Adicionar:

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

    ao seu .profile, .bashrcou .bash_profile.

Depois disso, você pode usar variáveis como $HTTP_PROXY, $http_proxy, $HttpProxy, etc. para todos os protocolos (HTTP, FTP, SOCKS), incluindo as $NO_PROXYexceções. Isso funcionará para a maioria das ferramentas da CLI e obtém as configurações do painel de controle do OS X.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.