ith*_*isa 2 c# c++ proxy winapi racket
我的一个软件需要在Windows上更改系统代理.更改路由器后面的LAN连接的HTTP代理很容易,但我找不到有关如何更改拨号代理或直接DSL(即PPPoE)连接的任何信息.
这很糟糕,因为我的很大一部分客户都在中国.在中国,很多人没有多台电脑,因而发现路由器浪费.他们只需将ADSL调制解调器连接到以太网端口并使用PPPoE.是的,这对于安全性和一切都很糟糕(僵尸网络在中国如此自由地漫游的一个原因)但这是现实,我的软件需要工作.
我还需要能够提供所有网络连接列表的代码.只要有代码在我相关的问题,需要一个知道的编辑会连接不工作.
我也喜欢使用reg 命令工作的东西.使用Windows API的简单C++或C#代码也很有用,但请注意我使用的是Racket,这是一种相当麻烦的FFI语言,这意味着最好尽量减少使用Windows C API.
假设您无法使用Windows本机API调用,我将提供一个只需要调用Windows命令(reg)和数组/字符串操作的解决方案,这是"Racket"语言必须实现的.
这不是最干净的方式,但考虑到要求,它应该是一个可行的解决方案.
好吧,正如您可能已经注意到的,不同连接的代理配置存储在密钥下: HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections
在该键下,有一个值存储DefaultConnectionSettings,另一个值存储SavedLegacySettings(均为REG_BINARY类型).除了提到的两个值之外,每个系统连接(也是REG_BINARY类型)的值都存储连接配置,包括代理设置.值的名称等于连接名称.
幸运的是,有些人已经逆向设计了存储在这些值中的BINARY数据的结构.
- 字节数零总是有一个3C或46 - 我找不到关于这个字节的更多信息.接下来的三个字节是零.
- 字节编号4是"Internet选项"属性表(Internet Explorer - >工具 - > Internet选项...)使用的计数器.当您手动更改Internet设置(例如"连接"选项卡中的LAN设置)时,此计数器会递增.它不是非常有用的字节.但它必须有一个值.我总是保持零.接下来的三个字节是零(字节5到7).
- 根据您的设置,字节数8可以采用不同的值.价值是:
- 09仅启用"自动检测设置"时
- 03仅启用"为LAN使用代理服务器"时
- 两者都启用时为0B
- 05仅启用"使用自动配置脚本"时
- 启用"自动检测设置"和"使用自动配置脚本"时为0D
- 07启用"为LAN使用代理服务器"和"使用自动配置脚本"时的07
- 全部三个都启用时为0F.
- 01当没有启用时.接下来的三个字节是零(字节9到B).
- 字节数C(十进制12)包含代理服务器地址的长度.例如,代理服务器'127.0.0.1:80'的长度为12(长度包括点和冒号).接下来的三个字节是零(字节) D到F).
- 字节10(或十进制的16)包含代理服务器地址 - 如'127.0.0.1:80'(其中80显然是端口号)
- 地址后的字节immediatley包含附加信息的长度.接下来的三个字节是零.例如,如果勾选了'绕过本地地址的代理服务器',则此字节为07,接下来的三个字节为零,然后是字符串即''(表示您绕过代理服务器.现在有7个字符,长度是07!).你必须自己试验以找到更多相关信息.如果您没有任何其他信息,则长度为0并且不添加任何信息.
- 附加信息后面的字节是自动配置脚本地址的长度(如果你没有脚本地址,那么你不需要添加任何东西,跳过这一步并转到步骤8).接下来的三个字节是零,然后地址来了.
- 最后,附加了32个零.(我不知道为什么!大概是为了填充二进制blob,也许它预计会有某种长度,你不希望windows有一些来源吗?)
完整的信息可以在这里找到.
有了这些信息,我认为你可以设法获取值.只需这样做reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections",正确解析输出并再次使用reg来回写修改.
我希望这有帮助.
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |