Come posso ottenere le informazioni proxy di Mac OS X in uno script Bash?


13

Ho diversi percorsi di rete impostati sul mio laptop: Lavoro, Casa, ecc. I lavoratori hanno tutti un server proxy impostato, mentre gli altri no. Funziona bene con le applicazioni OSX - Safari, Mail, persino Firefox e Thunderbird con il plug-in Proxy di sistema .

Per le applicazioni di terminale come git, svn, gem, e curlho il seguente nel mio .bash_profile:

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

La mia domanda è questa: esiste un modo per fare in modo che la variabile esportata cerchi il valore dalla posizione corrente del mio sistema? Preferirei che fosse fatto in modo dinamico (quindi se cambio posizione durante una sessione terminale cambierà), ma sarei felice con solo uno che lo imposta quando .bash_profileeseguito (il che significa che dovrei iniziare una nuova sessione terminale quando ho cambiato posizione).

Grazie!


Ecco uno script bash che utilizza networksetup e sicurezza per estrarre le informazioni sul proxy e impostare http_proxy e https_proxy: gist.github.com/alexargo/4657760

Risposte:


8

Quale versione di Mac OS X? Non sono sicuro che lo strumento sia incluso in Mac OS X 10.4 o precedente.

networksetupdovrebbe essere quello che stai cercando, vale a dire sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(ad es. sudo networksetup -getwebproxy Airport)

L'output esce così:

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

Quindi dovrai convertire l'output in qualcosa di utilizzabile.

Un esempio davvero grezzo che usa awk un paio di volte (le mie abilità awk sono piuttosto basilari) sarebbe:

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

Risultati in un output http://SERVER_ADDRESS:123


6
Un elenco di tutti i servizi:networksetup -listallnetworkservices
Arjan,

2
Adoro l'idea, ma non funziona per me. Se lo faccio sudo networksetup -getwebproxy Ethernet, ottengo la stampa e quindi un segfault. Immagino che il segfault provochi la rottura della pipa, quindi awknon riesce mai ad analizzare nulla.
James A. Rosen,

C'è qualche informazione in uscita? E segfault ancora senza i comandi awk?
Chealion,

Penso di aver visto una volta quell'errore di segmentazione sui miei Mac. Non ho il problema su 10.5.8 o 10.6.1 ora (entrambi Intel). Forse sei su un'altra versione?
Arjan,

Sono il 10.5.8 e succede senza awk. L'aggiunta di awk fa scomparire il messaggio segfault. . . insieme a tutti gli altri output.
James A. Rosen,

4

Nella risposta sopra , c'è un commento di tlrobinson su come non include il numero di porta.

Puoi farlo cambiando HTTP Proxy Server con HTTP Proxy Port

Ho anche visto questo fatto in questo modo:

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

Inoltre, questo comando può aiutare a scoprire altre impostazioni proxy: scutil --proxy


1

Quanto segue sembra funzionare, ma non sono sicuro di quanto sia robusto:

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

Non funziona se la tua posizione utilizza una proxy.pacposizione proxy invece di una hardcoded.


Purtroppo questo non sembra includere il numero di porta.
tlrobinson,

0

Potresti usare il piccolo strumento che ho scritto, che imposta le variabili d'ambiente comunemente usate per i proxy. L'utilizzo è semplice:

  1. Compilalo con xCode.
  2. Inserisci:

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

    al vostro .profile, .bashrco .bash_profile.

Dopo di che è possibile utilizzare le variabili come $HTTP_PROXY, $http_proxy, $HttpProxy, ecc per tutti i protocolli (HTTP, FTP, calze) comprese le $NO_PROXYeccezioni. Funzionerà con la maggior parte degli strumenti della CLI e ottiene le impostazioni dal pannello di controllo di OS X.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.