¿Cómo puedo obtener la información del proxy de Mac OS X en un script Bash?

13

Tengo varias ubicaciones de red configuradas en mi computadora portátil: Trabajo, Hogar, etc. El trabajo tiene un servidor proxy configurado, mientras que los otros no. Esto funciona bien para aplicaciones OSX: Safari, Mail, incluso Firefox y Thunderbird con el complemento System Proxy .

Para las aplicaciones de terminal, como git, svn, gem, y curlTengo el siguiente en mi .bash_profile:

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

Mi pregunta es esta: ¿hay alguna forma de hacer que la variable exportada busque el valor desde la ubicación actual de mi sistema? Preferiría que se hiciera dinámicamente (por lo que si cambio de ubicación durante una sesión de terminal, cambiará), pero estaría contento con solo uno que lo configure cuando se .bash_profileejecute (lo que significa que tendría que comenzar una nueva sesión de terminal cuando cambié de lugar).

¡Gracias!

James A. Rosen
fuente
Aquí hay un script bash que usa la configuración de red y la seguridad para extraer la información del proxy y establecer http_proxy y https_proxy: gist.github.com/alexargo/4657760

Respuestas:

8

¿Qué versión de Mac OS X? No estoy seguro de que la herramienta esté incluida con Mac OS X 10.4 o anterior.

networksetupdebe ser lo que está buscando, a saber sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(por ejemplo, sudo networksetup -getwebproxy Airport)

La salida sale así:

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

Por lo tanto, deberá convertir la salida a algo utilizable.

Un ejemplo realmente burdo de usar awk un par de veces (mis habilidades awk son bastante básicas) sería:

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

Resultados en una salida http://SERVER_ADDRESS:123

Chealion
fuente
55
Una lista de todos los servicios:networksetup -listallnetworkservices
Arjan
1
Me encanta la idea, pero no me funciona. Si solo lo hago sudo networksetup -getwebproxy Ethernet, obtengo la impresión y luego un segfault. Me imagino que el segfault hace que la tubería se rompa, por lo que awknunca se analiza.
James A. Rosen
¿Hay alguna salida de información? ¿Y todavía se segfault sin los comandos awk?
Chealion
Creo que realmente vi esa falla de segmentación en mis Mac una vez. No tengo el problema en 10.5.8 o 10.6.1 ahora (ambos Intel). Tal vez estás en alguna otra versión?
Arjan
Estoy en 10.5.8, y sucede sin el awk. Agregar el awk hace que desaparezca el mensaje segfault. . . junto con todos los demás resultados.
James A. Rosen
4

En la respuesta anterior , hay un comentario de tlrobinson sobre cómo no incluye el número de puerto.

Puede hacerlo cambiando el servidor proxy HTTP con el puerto proxy HTTP

También he visto esto hecho así:

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
fuente
2

Además, este comando puede ayudar a descubrir otras configuraciones de proxy: scutil --proxy

Brice
fuente
1

Lo siguiente parece funcionar, pero no estoy seguro de cuán robusto es:

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

No funciona si su ubicación utiliza una proxy.pacubicación de proxy codificada en lugar de una codificada.

James A. Rosen
fuente
Lamentablemente, esto no parece incluir el número de puerto.
tlrobinson
0

Podrías usar la pequeña herramienta que escribí, que establece las variables de entorno comúnmente utilizadas para los proxies. El uso es sencillo:

  1. Compílalo con xCode.
  2. Añadir:

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

    a tu .profile, .bashrco .bash_profile.

Después de que se pueden utilizar variables como $HTTP_PROXY, $http_proxy, $HttpProxy, etc., para todos los protocolos (HTTP, FTP, calcetines), incluyendo las $NO_PROXYexcepciones. Esto funcionará para la mayoría de las herramientas CLI y obtiene la configuración desde el panel de control de OS X.

jan.vogt
fuente