Comment puis-je obtenir les informations de proxy de Mac OS X dans un script Bash?

13

J'ai plusieurs emplacements réseau configurés sur mon ordinateur portable: bureau, domicile, etc. Cela fonctionne bien pour les applications OSX - Safari, Mail, même Firefox et Thunderbird avec le plugin System Proxy .

Pour les applications de terminaux tels que git, svn, gemet curlje suit dans mon .bash_profile:

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

Ma question est la suivante: existe-t-il un moyen de faire en sorte que la variable exportée recherche la valeur de l'emplacement actuel de mon système? Je préférerais que cela se fasse de manière dynamique (donc si je change d'emplacement pendant une session de terminal, cela changera), mais je serais content d'un seul qui le définisse lors de son .bash_profileexécution (ce qui signifie que je devrais démarrer une nouvelle session de terminal quand j'ai changé de lieu).

Merci!

James A. Rosen
la source
Voici un script bash qui utilise la configuration du réseau et la sécurité pour extraire les informations du proxy et définir http_proxy et https_proxy: gist.github.com/alexargo/4657760

Réponses:

8

Quelle version de Mac OS X? Je ne suis pas certain que l'outil soit inclus avec Mac OS X 10.4 ou une version antérieure.

networksetupdevrait être ce que vous recherchez, à savoir sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(par exemple, sudo networksetup -getwebproxy Airport)

La sortie se présente comme suit:

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

Vous devrez donc convertir la sortie en quelque chose d’utilisable.

Un exemple vraiment grossier utilisant awk plusieurs fois (mes compétences en awk sont plutôt basiques) serait:

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

Résultats dans une sortie http://SERVER_ADDRESS:123

Chealion
la source
6
Une liste de tous les services:networksetup -listallnetworkservices
Arjan
2
J'adore l'idée, mais ça ne marche pas pour moi. Si je le fais sudo networksetup -getwebproxy Ethernet, j'obtiens l'impression puis un défaut de segmentation. J'imagine que la faute de segmentation fait casser le tuyau, donc awkn'a jamais rien à analyser.
James A. Rosen,
Y a-t-il une sortie d'informations? Et est-ce toujours un défaut de segmentation sans les commandes awk?
Chealion
Je pense que j'ai vu cette erreur de segmentation sur mes propres Mac une fois. Je n'ai pas le problème sur 10.5.8 ou 10.6.1 maintenant (tous deux Intel). Peut-être que vous êtes sur une autre version?
Arjan
Je suis sur 10.5.8, et cela se produit sans le awk. L'ajout de l'awk fait disparaître le message segfault. . . ainsi que toutes les autres sorties.
James A. Rosen
4

Dans la réponse ci - dessus , il y a un commentaire de tlrobinson sur la façon dont il n'inclut pas le numéro de port.

Vous pouvez le faire en désactivant le serveur proxy HTTP avec le port proxy HTTP

J'ai également vu cela se faire comme ceci:

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
la source
3

De plus, cette commande peut aider à découvrir d'autres paramètres de proxy: scutil --proxy

Brice
la source
1

Ce qui suit semble fonctionner, mais je ne suis pas sûr de sa robustesse:

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

Cela ne fonctionne pas si votre emplacement utilise un proxy.pacemplacement proxy au lieu d'un emplacement codé en dur.

James A. Rosen
la source
Malheureusement, cela ne semble pas inclure le numéro de port.
tlrobinson
0

Vous pouvez utiliser le petit outil que j'ai écrit, qui définit les variables d'environnement couramment utilisées pour les proxys. L'utilisation est simple:

  1. Compilez-le avec xCode.
  2. Ajouter:

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

    à votre .profile, .bashrcou .bash_profile.

Après cela , vous pouvez utiliser des variables comme $HTTP_PROXY, $http_proxy, $HttpProxy, etc. pour tous les protocoles (HTTP, FTP, SOCKS) , y compris les $NO_PROXYexceptions. Cela fonctionnera pour la plupart des outils CLI et obtiendra les paramètres à partir du panneau de configuration OS X.

jan.vogt
la source