与phantomjs的cntlm代理

its*_*ohn 6 iis proxy ntlm windows-authentication phantomjs

我正在尝试在我的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

its*_*ohn 9

在与概念摔跤了一段时间后,我终于想出了如何设置这个.

安装cntlm后,我从命令提示符运行以下命令:

"c:\Program Files (x86)\Cntlm\cntlm.exe" -u <user_name> -d <domain_name> -H
Run Code Online (Sandbox Code Playgroud)

这会要求您输入密码,并在配置文件中吐出三个哈希值.

我将所需的配置削减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
Run Code Online (Sandbox Code Playgroud)

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();
});
Run Code Online (Sandbox Code Playgroud)

<machine_name>不能localhost因为phantomjs在主机时绕过代理localhost,所以请改用你的机器名或ip地址.

要运行它: phantomjs --proxy=localhost:3133 test.js