与phantomjs的cntlm代理

时间:2015-07-03 14:44:31

标签: iis proxy phantomjs windows-authentication ntlm

我试图在我的Windows机器上使用cntlm代理与使用PhantomJS的Windows身份验证的IIS上的本地Web应用程序进行通信。要创建代理,我正在执行:cntlm -v -u username@domain -p password -l 1456 localhost:80

我的应用程序位于localhost/myapp

为了测试这是否有效,我尝试浏览localhost:1456/myapp,但我总是得到一个auth挑战,没有合理的用户名/密码组合似乎有效。有关为什么此设置可能无法按预期工作的任何想法?

当我在浏览器中点击代理端点时,这是来自cntlm:

的输出

http://pastebin.com/xvvmfsGV

1 个答案:

答案 0 :(得分:9)

在与概念搏斗了一段时间之后,我终于想出了如何设置这个。

安装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