kodesu 发表于 2024-5-7 18:54

Python-切换代{过}{滤}理脚本

Windows系统无法根据不同的SSID来切换代{过}{滤}理服务器,导致可能某些环境下配置的本地代{过}{滤}理服务器ip会应用到其他的网络里面去,导致访问网页错误,微软的这个做法真的十分愚蠢,所以我弄了个脚本能够在这些情况下自动切换代{过}{滤}理服务器而不用跑设置里面找半天,话不多说,开始
#### 原理
修改注册表让代{过}{滤}理设置自动化生效
注册表路径: HKEY_CURRENT_USER/Software\Microsoft\Windows\CurrentVersion\Internet Settings,通过修改注册表直接让代{过}{滤}理服务器生效
## 代码实现
```
from winreg import OpenKey, SetValueEx, QueryValueEx, CloseKey, HKEY_CURRENT_USER, KEY_ALL_ACCESS, REG_DWORD, REG_SZ

# 配置常量
PROXY_IP = '192.168.5.250'
PROXY_PORT = '7890'
BYPASS_LIST = ['<local>', '*.steamchina.com', 'csgo.wmsj.cn', 'dota2.wmsj.cn', 'wmsjsteam.com', 'dl.steam.clngaa.com', 'dl.steam.ksyna.com', 'st.dl.bscstorage.net', 'st.dl.eccdnx.com', 'st.dl.pinyuncloud.com', 'steampipe.steamcontent.tnkjmec.com', 'steampowered.com.8686c.com', 'steamstatic.com.8686c.com', 'xz.pphimalayanrt.com', 'steampipe-kr.akamaized.net', 'steampipe-partner.akamaized.net', 'steampipe.akamaized.net', '.steamcontent.com', 'localhost', '127.*', '10.*', '224.*', '239.*', '172.16-31.*', '192.168.*']

def toggle_proxy(proxy_ip, proxy_port, bypass_list):
    # 打开Internet Settings注册表键
    internet_settings = OpenKey(HKEY_CURRENT_USER,
      r'Software\Microsoft\Windows\CurrentVersion\Internet Settings',
      0, KEY_ALL_ACCESS)
    print("打开Internet Settings注册表键")

    # 检查代{过}{滤}理是否已启用
    proxy_enabled = QueryValueEx(internet_settings, 'ProxyEnable')

    if proxy_enabled:
      # 如果代{过}{滤}理已启用,禁用代{过}{滤}理
      SetValueEx(internet_settings, 'ProxyEnable', 0, REG_DWORD, 0)
      print("代{过}{滤}理已禁用")
    else:
      # 如果代{过}{滤}理未启用,启用代{过}{滤}理
      SetValueEx(internet_settings, 'ProxyEnable', 0, REG_DWORD, 1)
      print("代{过}{滤}理已启用")

      # 设置代{过}{滤}理服务器和端口
      proxy_server = f'{proxy_ip}:{proxy_port}'
      SetValueEx(internet_settings, 'ProxyServer', 0, REG_SZ, proxy_server)
      print(f"设置代{过}{滤}理服务器和端口为:{proxy_server}")

      # 设置不使用代{过}{滤}理的地址
      bypass = ';'.join(bypass_list)
      SetValueEx(internet_settings, 'ProxyOverride', 0, REG_SZ, bypass)
      print(f"设置不使用代{过}{滤}理的地址为:{bypass}")

    # 关闭注册表键
    CloseKey(internet_settings)
    print("关闭Internet Settings注册表键")

# 使用
toggle_proxy(PROXY_IP, PROXY_PORT, BYPASS_LIST)
```

lizy169 发表于 2024-5-8 08:12

这个好,顶一下

shaosir2024 发表于 2024-5-8 08:54

实用,顶一下

zhmsun 发表于 2024-5-15 13:18

挺好。mark

花开叶落本无缘 发表于 2024-7-12 17:33

没看懂,太高级了
页: [1]
查看完整版本: Python-切换代{过}{滤}理脚本