使用 Python 以编程方式检测 Windows XP 上的系统代理设置

2023-11-22

我开发了一家跨国公司使用的关键应用程序。全球各地办公室的用户都需要能够安装此应用程序。

该应用程序实际上是 Excel 的一个插件,我们有一个基于 Setuptools 的 easy_install 的自动安装程序,可确保用户每次打开 Excel 时自动安装或更新项目的所有依赖项。这一切都运行得非常优雅,因为用户很少意识到完全在后台发生的所有安装。

不幸的是,我们正在扩大和开设新的办事处,这些办事处都有不同的代理设置。这些设置似乎每天都在变化,因此我们无法跟上那些在不告诉我们的情况下更改内容的外包安全人员。这很糟糕,但我们必须解决它。

我想以编程方式检测用户运行的 Windows 工作站上的系统范围代理设置:

组织中的每个人都运行 Windows XP 和 Internet Explorer。我已经证实,每个人都可以毫无问题地从 IE 下载我们的东西,无论他们在世界的哪个地方。

因此,我需要做的就是检测 IE 正在使用哪些代理设置,并让安装工具使用这些设置。理论上所有这些信息都应该在注册表中..但是有没有更好的方法来找到它并保证不会随着人们升级 IE 而改变?例如,我可以使用 Windows API 调用来发现代理设置吗?

总之:

  • 我们在 Windows XP 上使用 Python 2.4.4
  • 我们需要检测 Internet Explorer 代理设置(例如主机、端口和代理类型)
  • 我将使用此信息动态地重新配置 easy_install,以便它可以通过代理下载 Egg 文件。

更新0:

我忘记了一个重要的细节:每个站点都有一个自动配置“pac”文件。

Windows\CurrentVersion\InternetSettings\AutoConfigURL 中有一个键,它指向本地服务器上的 HTTP 文档,其中包含看起来像 JavaScript 文件的内容。

pac 脚本基本上是一系列嵌套的 if 语句,它将 URL 与正则表达式进行比较,然后最终返回所选代理服务器的主机名。该脚本是一个名为 FindProxyForURL(url, host) 的 JavaScript 函数

因此,挑战在于找出任何给定服务器要使用哪个代理。唯一 100% 保证执行此操作的方法是查找 pac 文件并从 Python 调用 Javascript 函数。

有什么建议么?有没有更优雅的方法来做到这一点?


这是一个示例,应在系统托盘中创建子弹绿色(代理启用)或红色(代理禁用)

它展示了如何在Windows注册表中读取和写入

它使用gtk

#!/usr/bin/env python
import gobject
import gtk
from _winreg import *

class ProxyNotifier:
    def __init__(self):        
        self.trayIcon = gtk.StatusIcon()
        self.updateIcon()

        #set callback on right click to on_right_click
        self.trayIcon.connect('popup-menu', self.on_right_click)
        gobject.timeout_add(1000, self.checkStatus)

    def isProxyEnabled(self):

        aReg = ConnectRegistry(None,HKEY_CURRENT_USER)

        aKey = OpenKey(aReg, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings") 
        subCount, valueCount, lastModified = QueryInfoKey(aKey)

        for i in range(valueCount):                                           
            try:
                n,v,t = EnumValue(aKey,i)
                if n == 'ProxyEnable':
                    return v and True or False
            except EnvironmentError:                                               
                break
        CloseKey(aKey)  

    def invertProxyEnableState(self):
        aReg = ConnectRegistry(None,HKEY_CURRENT_USER)
        aKey = OpenKey(aReg, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", 0, KEY_WRITE)
        if self.isProxyEnabled() : 
            val = 0 
        else:
            val = 1
        try:   
            SetValueEx(aKey,"ProxyEnable",0, REG_DWORD, val) 
        except EnvironmentError:                                          
            print "Encountered problems writing into the Registry..."
        CloseKey(aKey)

    def updateIcon(self):
        if self.isProxyEnabled():
            icon=gtk.STOCK_YES
        else:
            icon=gtk.STOCK_NO
        self.trayIcon.set_from_stock(icon)

    def checkStatus(self):
        self.updateIcon()
        return True


    def on_right_click(self, data, event_button, event_time):
        self.invertProxyEnableState()
        self.updateIcon()


if __name__ == '__main__':
    proxyNotifier = ProxyNotifier()
    gtk.main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 以编程方式检测 Windows XP 上的系统代理设置 的相关文章

  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 如何清除NPM的https代理设置?

    如何清除NPM之前的ssl代理设置 好吧 我搜索了很多 但我得到的所有帖子主要是关于如何set公司网络中的代理 我尝试将代理设置为空 npm config set http proxy npm config set https proxy
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 如何将 PySpark 数据帧的每个非字符串列与浮点常量相除或相乘?

    我的输入数据框如下所示 from pyspark sql import SparkSession spark SparkSession builder appName Basics getOrCreate df spark createDa
  • Jhipster + REST 客户端 + 身份验证

    我需要了解如何验证 REST 客户端 可能是 Paw 可能是 Android 应用程序 使用 AFNetworking 和 jHipster 的 iOs 应用程序 我认为 更一般地说 使用 spring boot 我不是这方面的专家 虽然我
  • 使用 useEffect 更新 useReducer 'state'

    在我的应用程序中 我使用 React Hooks Context API 现在 每当我的 Provider 组件安装时 我都需要将从 localStorage 获取的数据分配给initialState carts state carts 如
  • 我可以将任意函数传递给 Scala 中的另一个函数吗?

    我是 Scala 的新手 能够将函数传递给其他函数非常巧妙 但是我可以传递一个随意的函数引用另一个函数 所述函数参数的数量将是固定的 也就是说 我也很好奇是否也可以传递具有任意数量的函数 我总是被类型错误绊倒 我尝试过使用Any但这似乎没有
  • 如何使用 iPhone 的 json 解析对象数组

    我在解析 JSON 结果中的对象数组时遇到问题 first name vijay last name last creditCardNumber 178978977779787979 month 02 year 2012 address A
  • 打开远程文档并保存回远程服务器

    我为我的办公室编写了一个在服务器上运行的网络应用程序 我们所有的文档也都在服务器上 我希望能够让用户通过我的网络应用程序浏览服务器上的文件夹 在编辑器 在线或桌面 中打开它 能够编辑它并将其保存回服务器的位置被打开 我一直在研究 Googl
  • Java:确定当前 Windows 用户的编程方式

    我看到很多类似的问题 但是我想使用 Java 查找当前登录用户的用户名 它可能是这样的 System getProperty current user 但是 我不太确定 你实际上非常接近 这就是您正在寻找的 System getProper
  • MemoryStream,无法访问关闭的流

    随着sharpPDF我生成一个 pdf 内存流 我想通过电子邮件直接发送它 但是 ms Seek 行给出了一个 ObjectDisposeException 无法访问关闭的流 pdf CreatePDF 方法采用 输出 文件名字符串或 输出
  • 如何为在 main() 外部和内部声明的变量分配内存

    我注意到 在处理一些大型数组 例如双倍 1000 x 1000 时 如果我在 main 内部声明数组 则我的程序会耗尽内存 但如果我在 main 外部声明数组 则这种情况似乎永远不会发生 即使是更大的阵列 有人可以解释一下区别是什么吗 当在
  • 如何同时更新结构体的多个字段?

    假设我有一个结构 struct Vector3 float x float y float z 注意sizeof Vector3 必须保持不变 编辑 我对没有设置器的解决方案感兴趣 我们不要创建该结构的实例Vector3 pos 我怎样才能
  • 如何从 tsv 文件中提取第一列?

    我有一个包含一些数据的文件 我想仅使用第一列作为我的脚本的标准输入 但我在提取它时遇到问题 我尝试使用这个 awk F t print 1 inputs tsv 但它只显示第一列的第一个字母 我尝试了其他一些操作 但它要么显示整个文件 要么
  • Python 3 C API 中的文件 I/O

    Python 3 0 中的 C API 已更改 弃用 文件对象的许多函数 之前 在 2 X 中 您可以使用 PyObject PyFile FromString char filename char mode 创建一个 Python 文件对
  • 循环遍历 Excel 工作表

    我有以下代码 我希望它在工作簿的其他 25 个工作表中运行 而不是重复代码 25 次 对于每个工作表 有没有办法让它循环 有人可以帮忙吗 Sub DeleteEmptyRows Dim ws As Worksheet Dim strSear
  • 如何在 selenium-webdriver 中获取窗口标题、id 和名称?

    我正在尝试实施以下方法硒网络驱动程序 ruby 获取所有窗口 ID 获取所有窗口标题 获取所有窗口名称 我运行 Selenium IDE 并将脚本导出到 Ruby Test Unit 将其另存为 rb 使用 Aptana Studio 3
  • 为什么 Delphi 说“无法解析单位名称 xxx”?

    我正在使用 Delphi2010 Enterprise Update 4 当我在 IDE 中打开项目并显示主窗体代码时 有2个单位名称用红色下划线表示 xxx http img268 imageshack us img268 6475 un
  • 如何将宽度设置为 50%

    我有一个水平方向的 LinearLayout 和 2 个 ImageView 我想让 ImagesView 填充屏幕宽度的 50 以便在不同尺寸的每部手机或平板电脑上工作 像这样的东西 50 50 迄今为止最好的
  • 从析构函数中调用虚函数

    这样安全吗 class Derived public PublicBase private PrivateBase Derived FunctionCall virtual void FunctionCall PrivateBase Fun
  • C# 问题:如何将 DataGridView 中所做的更改保存回所使用的 DataTable?

    我从 DataSet 获取 DataTable 然后将该 DataTable 绑定到 DataGridView 一旦用户编辑了 DataGridView 上的信息 我如何获取这些更改并将它们放回到使用过的 DataTable 中 然后我可以
  • 为什么 SonarQube 重新打开标记为误报的问题?

    我们的组织刚刚开始使用 SonarQube 我们看到了一些对我们来说似乎很奇怪的东西 我们有一个插件 允许用户将问题标记为 误报 但我们标记为 误报 的任何问题都会在下次 SonarQube 运行时将其状态重置为 打开 对于标记为 无法修复
  • 使用 Python 以编程方式检测 Windows XP 上的系统代理设置

    我开发了一家跨国公司使用的关键应用程序 全球各地办公室的用户都需要能够安装此应用程序 该应用程序实际上是 Excel 的一个插件 我们有一个基于 Setuptools 的 easy install 的自动安装程序 可确保用户每次打开 Exc