我试图在Windows计算机上使用cntlm代理与使用PhantomJS的Windows身份验证的IIS上的本地Web应用程序进行通信。要创建代理,我正在做:cntlm -v -u username@domain -p password -l 1456 localhost:80
我的应用程序位于localhost/myapp
为了测试此方法是否有效,我尝试浏览到localhost:1456/myapp
,但始终遇到身份验证挑战,并且似乎没有明智的用户名/密码组合有效。关于为什么此设置可能无法按预期工作的任何想法?
当我在浏览器中单击代理端点时,这是cntlm的输出:
http://pastebin.com/xvvmfsGV
最佳答案
经过一段时间的尝试,我终于找到了如何进行设置的方法。
安装cntlm之后,我从命令提示符处运行了以下命令:
"c:\Program Files (x86)\Cntlm\cntlm.exe" -u <user_name> -d <domain_name> -H
这要求您输入密码,并在配置文件中吐出三个哈希值。
我将
cntlm.ini
中的所需配置缩减为:Username <user_name>
Domain <domain_name>
PassLM <LM_hash>
PassNT <NT_hash>
PassNTLMv2 <NTLMv2_hash>
Proxy 192.168.7.1:80 #random proxy
NoProxy *
Listen 3133 # unused port
即使您不需要一个或只有一个代理,cntlm也会强制您指定一个顶级代理,因此该选项的任何有效数字都可以。将
NoProxy
设置为*
可确保任何请求都不会传递到指定的虚假代理。在控制台中运行
"c:\Program Files (x86)\Cntlm\cntlm.exe" -f
以验证一切正常。否则,将其作为服务启动和停止。为了测试phantomjs,我使用了以下脚本:
var page = require('webpage').create();
page.open('http://<machine_name>/myapp', function(status) {
console.log("Status: " + status);
if(status === "success") {
page.render('example.png');
}
phantom.exit();
});
<machine_name>
不能为localhost
,因为当主机为localhost
时phantomjs绕过代理,因此请改用您的计算机名或IP地址。要运行它:
phantomjs --proxy=localhost:3133 test.js