赞
踩
- class MacSetting(object):
- def __init__(self, args):
- self.device = None
- self.listen = None
- self.modes = None
- self.mode_name = None
- for option in args.listen:
- protos = [x.name for x in option.protos]
- if option.unix or 'ssl' in protos or 'secure' in protos:
- continue
- if 'socks5' in protos:
- self.modes = ['setsocksfirewallproxy']
- self.mode_name = 'socks5'
- self.listen = option
- break
- if 'http' in protos:
- self.modes = ['setwebproxy', 'setsecurewebproxy']
- self.mode_name = 'http'
- self.listen = option
- break
- if self.listen is None:
- print('No server listen on localhost by http/socks5')
- ret = subprocess.check_output(['/usr/sbin/networksetup', '-listnetworkserviceorder']).decode()
- en0 = next(filter(lambda x: 'Device: en0' in x, ret.split('\n\n')), None)
- if en0 is None:
- print('Cannot find en0 device name!\n\nInfo:\n\n'+ret)
- return
- line = next(filter(lambda x: x.startswith('('), en0.split('\n')), None)
- if line is None:
- print('Cannot find en0 device name!\n\nInfo:\n\n'+ret)
- return
- self.device = line[3:].strip()
- for mode in self.modes:
- subprocess.check_call(['/usr/sbin/networksetup', mode, self.device, 'localhost', str(self.listen.port), 'off'])
- print(f'System proxy setting -> {self.mode_name} localhost:{self.listen.port}')
- def clear(self):
- if self.device is None:
- return
- for mode in self.modes:
- subprocess.check_call(['/usr/sbin/networksetup', mode+'state', self.device, 'off'])
- print('System proxy setting -> off')

这段代码定义了一个名为 MacSetting 的类,其结构如下:
总的来说,这个类的作用是设置或清除 macOS 操作系统上的代理服务器。在构造函数中,根据监听协议来确定代理模式(socks5 或 http),接着使用网络设置工具设置代理规则。在 clear 方法中,则使用相同的网络设置工具来将代理服务器禁用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。