通过 windows 命令行设置代理,包括登录参数

Posted

技术标签:

【中文标题】通过 windows 命令行设置代理,包括登录参数【英文标题】:Set proxy through windows command line including login parameters 【发布时间】:2015-01-15 13:22:06 【问题描述】:

我想通过命令行设置代理,我发现的第一件事是你必须以管理员权限运行命令行 - 那么基本代理设置将是:

netsh winhttp set proxy SERVER:PORT

这很好用,但我还想添加一个登录名。如您所见,我尝试使用 netsh->winhttp,但是 manual 没有说明登录部分,所以我只是尝试:

netsh winhttp set proxy user:password@SERVER:PORT

不幸的是,这不起作用。甚至有可能在netsh->winhttp中实现这样的东西吗?

如果是这样,怎么做?如果不是 => 我应该遵循哪些 Windows 命令? 结果,或这是更容易̶a̶c̶h̶i̶e̶v̶e̶a̶b̶l̶e̶通过一些WINDOWSAPI̶(例如,使用C / C + +̶̶)̶?̶ P>

感谢您的帮助,如果有不清楚的地方,请随时提出任何问题。

使用:Windows 7、cmd.exe、netsh->winhttp

编辑: 这看起来像 C++ 方式:http://msdn.microsoft.com/en-us/library/windows/desktop/aa383144(v=vs.85).aspx,但 C++ 更好的方式可能是这样:http://msdn.microsoft.com/en-us/library/windows/desktop/aa385384(v=vs.85).aspx#general_option,所以剩下的问题是如何实现这一点一般在命令行中(或者更好的命令行->netsh->winhttp)?

【问题讨论】:

看起来不可能。 activating Windows through an authenticating proxy 提供了一些替代方案 另见How to set SQUID Proxy authentication using netsh? hmmm 似乎很奇怪,根本没有命令行方式来进行代理身份验证......(现在不谈论 netsh......) 可能是因为ProxyUserProxyPassword 的注册表项被加密了? @DavidPostill 可能,但是在使用系统自己的命令时应该没有问题,应该知道如何解密/加密...... 【参考方案1】:

IE 可以设置用户名和密码代理,所以也许设置在那里并导入确实有效

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d name:port
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyUser /t REG_SZ /d username
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyPass /t REG_SZ /d password
netsh winhttp import proxy source=ie

【讨论】:

发现: 代理通过这些注册表在运行任何浏览器时, netsh winhttp 仍然显示直接访问,同时禁用代理需要将注册表更改 ProxyEnable0 之后重新启动浏览器。 (顺便说一句:我的建议是发送带有 /f 参数的 reg add 命令,以便无需询问即可重写现有条目) 问题仍然存在: 即使设置了代理,代理 未设置身份验证 ...确实如此不能解决预认证的问题。 非常感谢这个解决方案。这很好用,因为我之前尝试过的 netsh 命令不起作用。 对ma也不行,我在最新的Azure 2019 Windows Server数据中心测试过。【参考方案2】:

根据我的经验,解决此问题的最佳方法(以及许多其他情况)是使用cntlm,它是一个指向远程身份验证代理的本地无身份验证代理。然后,您可以将 WinHTTP 设置为指向您的本地 CNTLM(通常是 localhost:3128),并且可以将 CNTLM 本身设置为指向远程身份验证代理。 CNTLM 有一个“神奇的 NTLM 方言检测”选项,可以生成密码散列并放入 CNTLM 配置文件中。

【讨论】:

这里是运行最新的cntlm 作为 Windows 服务的问题和解决方案:superuser.com/questions/1192694/cannot-start-cntlm 另见***.com/questions/9181637/…【参考方案3】:

如果您使用的是 Microsoft windows 环境,则可以根据需要设置名为 HTTP_PROXYFTP_PROXYHTTPS_PROXY 的变量。

我已使用以下设置来允许我在 windows 命令提示符下的命令使用浏览器代理访问互联网。

set HTTP_PROXY=http://proxy_userid:proxy_password@proxy_ip:proxy_port

右边的参数必须替换为实际值。

一旦设置了变量HTTP_PROXY,我们在windows命令提示符下执行的所有后续命令将能够通过代理访问互联网以及提供的身份验证。

此外,如果您还想使用 ftp 和 https 来使用相同的代理,那么您可能还希望使用以下环境变量。

set FTP_PROXY=%HTTP_PROXY%

set HTTPS_PROXY=%HTTP_PROXY%

【讨论】:

看起来很整洁,它是否记录在某个地方? windows支持如何(哪些版本)? 对我来说,它在我的 Windows 7 上运行良好。我们的主要目标是在运行期望连接网络的命令(通过 http 代理)之前设置变量 HTTP_PROXY 设置环境变量的语法与 shell 不同到外壳和操作系统到操作系统。您也可以在 Linux 系统上肯定地找到它的不同格式。我觉得基本逻辑应该适用于任何操作系统。我从互联网上的某个地方收集了这些我完全不记得的信息。等我想起来我会在这里更新。 我一直在寻找windows cmd的代理设置,这个可行,谢谢。使用此设置,命令行工具可以在合作者的代理后面工作。 只是为了把东西放在手边。如果您有锁,则还应保留密钥;)以下是删除代理的命令(不使用大括号)。 设置 http_proxy= 设置 https_proxy= 你拯救了我的一天。适用于 Windows Server 2019,适用于 Nuget 等工具。 (当它在本地系统帐户下运行时。)【参考方案4】:

cmd

通过 socks 代理传输所有互联网流量:

netsh winhttp set proxy proxy-server="socks=localhost:9090" bypass-list="localhost"

查看当前代理设置:

netsh winhttp show proxy

清除所有代理设置:

netsh winhttp reset proxy

【讨论】:

以上是关于通过 windows 命令行设置代理,包括登录参数的主要内容,如果未能解决你的问题,请参考以下文章

Windows命令行设置代理

Powershell命令行设置代理

git代理,windows命令行代理,linux命令行代理

命令行的 Visual Studio 负载测试设置参数

如何使用SecureCRT

远程登录Linux主机在只有命令行下运行VIM编辑器怎样设置语法高亮?