Skip to content

Instantly share code, notes, and snippets.

@ssrlive
Created July 14, 2024 04:30
Show Gist options
  • Save ssrlive/207b071e3ece199324899f54e99e7e45 to your computer and use it in GitHub Desktop.
Save ssrlive/207b071e3ece199324899f54e99e7e45 to your computer and use it in GitHub Desktop.
macOS settings for proxy
//
// https://github.com/ShadowsocksR-Live/ssrMac/blob/master/ssr_mac_sysconf/main.m
//
use core_foundation::{
array::CFArray,
base::{TCFType, ToVoid},
dictionary::{CFDictionary, CFMutableDictionary},
number::CFNumber,
propertylist::CFPropertyList,
string::{CFString, CFStringRef},
};
use system_configuration::{
dynamic_store::{SCDynamicStore, SCDynamicStoreBuilder},
sys::schema_definitions::{kSCDynamicStorePropNetPrimaryService, kSCPropNetDNSServerAddresses},
};
use system_configuration_sys::{
preferences::{
SCPreferencesApplyChanges, SCPreferencesCommitChanges, SCPreferencesCreate,
SCPreferencesGetValue, SCPreferencesSynchronize,
},
schema_definitions::kSCPrefNetworkServices,
};
// This example will change the proxy settings on the primary
// network interface to 127.0.0.1:8080(http) and 127.0.0.1:1080(socks)
fn main() {
unsafe {
let pref_ref = SCPreferencesCreate(
std::ptr::null_mut(),
CFString::new("ShadowsocksR").as_concrete_TypeRef(),
std::ptr::null_mut(),
);
let sets = SCPreferencesGetValue(pref_ref, kSCPrefNetworkServices) as *mut CFDictionary;
// let zero_value = CFString::new("0").as_CFType();
let zero_value = CFNumber::from(0);
let mut proxies = CFMutableDictionary::new();
proxies.set(kCFNetworkProxiesHTTPEnable, zero_value);
proxies.set(kCFNetworkProxiesHTTPSEnable, zero_value);
proxies.set(kCFNetworkProxiesProxyAutoConfigEnable, zero_value);
proxies.set(kCFNetworkProxiesSOCKSEnable, zero_value);
SCPreferencesCommitChanges(pref_ref);
SCPreferencesApplyChanges(pref_ref);
SCPreferencesSynchronize(pref_ref);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment