Wie kann ich die Proxy-Informationen von Mac OS X in einem Bash-Skript abrufen?

13

Auf meinem Laptop sind mehrere Netzwerkstandorte eingerichtet: "Arbeit", "Zuhause" usw. Auf den Arbeitsservern ist ein Proxyserver eingerichtet, auf den anderen nicht. Dies funktioniert gut für OSX-Anwendungen - Safari, Mail, sogar Firefox und Thunderbird mit dem System Proxy- Plugin.

Für Terminal - Anwendungen wie zum Beispiel git, svn, gemund curlich habe folgende in meinem .bash_profile:

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

Meine Frage lautet: Gibt es eine Möglichkeit, die exportierte Variable dazu zu bringen, den Wert vom aktuellen Standort meines Systems abzurufen? Ich würde es vorziehen, dynamisch ausgeführt zu werden (wenn ich also während einer Terminalsitzung die Position ändere, ändert sich dies), aber ich würde mich über nur eine freuen, die dies beim .bash_profileAusführen festgelegt hat (was bedeutet, dass ich eine neue Terminalsitzung starten muss) als ich den Ort gewechselt habe).

Vielen Dank!

James A. Rosen
quelle
Hier ist ein Bash-Skript, das mithilfe von Netzwerkeinrichtung und Sicherheit die Proxy-Informationen extrahiert und http_proxy und https_proxy festlegt: gist.github.com/alexargo/4657760

Antworten:

8

Welche Version von Mac OS X? Ich bin mir nicht sicher, ob das Tool in Mac OS X 10.4 oder früher enthalten ist.

networksetupsollte das sein, wonach du suchst, nämlich sudo networksetup -getwebproxy NAME_OF_NETWORK_DEVICE(zB sudo networksetup -getwebproxy Airport)

Die Ausgabe sieht folgendermaßen aus:

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

Sie müssen also die Ausgabe in etwas Verwendbares konvertieren.

Ein sehr grobes Beispiel, in dem awk ein paar Mal verwendet wird (meine awk-Kenntnisse sind eher grundlegend), wäre:

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

Ergibt eine Ausgabe http://SERVER_ADDRESS:123

Chealion
quelle
6
Eine Liste aller Dienste:networksetup -listallnetworkservices
Arjan
2
Ich liebe die Idee, aber sie funktioniert bei mir nicht. Wenn ich das nur mache sudo networksetup -getwebproxy Ethernet, bekomme ich den Ausdruck und dann einen Segfault. Ich stelle mir vor, dass der Segfehler dazu führt, dass die Pipe bricht awk.
James A. Rosen
Gibt es eine Informationsausgabe? Und funktioniert es immer noch ohne die awk-Befehle?
Chealion
Ich glaube, ich habe diesen Segmentierungsfehler tatsächlich einmal auf meinen eigenen Macs gesehen. Ich habe das Problem jetzt nicht auf 10.5.8 oder 10.6.1 (beide Intel). Vielleicht haben Sie eine andere Version?
Arjan
Ich bin am 10.5.8 und es passiert ohne die awk. Durch Hinzufügen der awk wird die Segfault-Meldung ausgeblendet. . . zusammen mit allen anderen Ausgaben.
James A. Rosen
4

In der obigen Antwort gibt es einen Kommentar von tlrobinson darüber, dass die Portnummer nicht enthalten ist.

Sie können dies tun, indem Sie HTTP Proxy Server mit HTTP Proxy Port ausschalten

Ich habe das auch so gesehen:

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
quelle
3

Außerdem kann dieser Befehl dazu beitragen, andere Proxy-Einstellungen zu ermitteln: scutil --proxy

Brice
quelle
1

Folgendes scheint zu funktionieren, aber ich bin mir nicht sicher, wie robust es ist:

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

Es funktioniert nicht, wenn Ihr Standort einen proxy.pacanstelle eines fest codierten Proxy-Standorts verwendet.

James A. Rosen
quelle
Leider scheint dies nicht die Portnummer zu enthalten.
TLROBINSON
0

Sie können das kleine Tool verwenden, das ich geschrieben habe und das die häufig verwendeten Umgebungsvariablen für Proxys festlegt. Die Verwendung ist unkompliziert:

  1. Kompiliere es mit xCode.
  2. Hinzufügen:

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

    zu Ihrem .profile, .bashrcoder .bash_profile.

Danach können Sie Variablen wie verwenden können $HTTP_PROXY, $http_proxy, $HttpProxyetc. für alle Protokolle (HTTP, FTP, SOCKS) , einschließlich der $NO_PROXYAusnahmen. Dies funktioniert für die meisten CLI-Tools und ruft die Einstellungen über das OS X-Bedienfeld ab.

jan.vogt
quelle