2016-03-21 8 views
3

Wie ändert man Proxy-Einstellungen auf einem Mac OSX programmatisch. Ich bin fließend in iOS, und da Mac OS-Programmierung ähnlich ist, sollte es nicht viel Probleme damit geben. Allerdings fehlt mir die Logik, die benötigt wird, um Proxy-Änderungen programmatisch zu erstellen. Manuelles Optimieren ist extrem einfach. Dies ist die Registerkarte Netzwerk in den Systemeinstellungen Ich bin nach:Proxy auf Mac OSX programmatisch ändern

enter image description here

Was ich versucht habe:

let dynamicStore: SCDynamicStoreRef = SCDynamicStoreCreate(nil, "setProxy" as CFString, nil, nil)! 
let updated = SCDynamicStoreSetValue(dynamicStore, "HTTPProxy" as CFStringRef, "111.222.333.1") // updated is false, indicating unsuccessful operation 

dies auch versucht, aber das Wörterbuch zurückgegeben wird nur lesen

let dynamicStore: SCDynamicStoreRef = SCDynamicStoreCreate(nil, "myFunc" as 

    CFString, nil, nil)! 

    let proxyDict = SCDynamicStoreCopyProxies(dynamicStore) 

    if let proxyDict = SCDynamicStoreCopyProxies(dynamicStore) as NSDictionary? { 
     if let port = proxyDict["HTTPPort"] as? Int { 
      print("HTTPPort:", port) 
      proxyDict["HTTPPort"] = 8088; // can't do that 
     } 
    } 

Mir gehen die Ideen aus. Jede Information wird geschätzt.

Antwort

3

Von this answer, hier ist ein Beispielskript:

e=$(networksetup -getsocksfirewallproxy wi-fi | grep "No") 

if [ -n "$e" ]; then 
    echo "Turning on proxy" 
    networksetup -setsocksfirewallproxystate wi-fi on 
else 
    echo "Turning off proxy" 
    networksetup -setsocksfirewallproxystate wi-fi off 
fi 

Es swiches (on/off) der SOCKS-Proxy für den Wi-Fi-Verbindung des Benutzers.

Sie können diese Idee verwenden, um das Skript für Ihre Bedürfnisse zu erstellen. Sie können Ihre gewünschte Logik in einem Bash-Skript wie diesem oder in Cocoa implementieren.

  • Verwenden Sie networksetup -listallnetworkservices, um alle Verbindungen aufzulisten.
  • Verwenden Sie networksetup -setwebproxy, um den Proxy für eine bestimmte Verbindung einzurichten.

Zum Beispiel, hier ist mein Terminal-Ausgang:

$ networksetup -listallnetworkservices 
An asterisk (*) denotes that a network service is disabled. 
MBBEthernet 
Wi-Fi 
Wi-Fi Modem Yota 4G LTE 
Bluetooth PAN 
Thunderbolt Bridge 
iPhone 

$ networksetup -setwebproxy some bad args 
** Error: The parameters were not valid. 

$ networksetup -setwebproxy Wi-Fi 1.2.3.4 8080 

Der letzte Befehl den leeren stdout gab, bedeutet dies Erfolg.

Siehe auch man networksetup.

How to execute a shell command from a Cocoa app.

Die obigen Befehle, die von der Terminal-App ausgeführt wurden, haben um Autorisierung gebeten. Es tut mir leid, ich bin mir nicht sicher, ob Sie es "wie es ist" lassen können (starten Sie einfach Ihre NSTask, OS X wird den Rest erledigen), oder Sie müssen die richtigen Anmeldeinformationen über SFAuthorization erhalten, bevor Sie das tun.

0

CFDictionaryCreateMutableCopy würde den Trick tun, aber selbst nachdem Sie das Wörterbuch erfolgreich geändert haben, hat SCDynamicStoreSetMultiple nur keinen Effekt.