本文转自:http://www.cnblogs.com/myx/archive/2013/03/25/php-ntlm-python-net.html

早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,简称LM,它是如此简单以至很容易就被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。NTLM是windows早期安全协议,因向后兼容性而保留下来。NTLM是NT LAN Manager的缩写,即NT LAN管理器。NTLM 是为没有加入到域中的计算机(如独立服务器和工作组)提供的身份验证协议。

NTLM验证允许Windows用户使用当前登录系统的身份进行认证,当前用户应该是登陆在一个域(domain)上,他的身份是可以自动通过浏览器传递给服务器的。它是一种单点登录的策略,系统可以通过NTLM重用登录到Windows系统中的用户凭证,不用再次要求用户输入密码进行认证。

其实这次要做的功能主要是PHP的NTLM登录,不过搜索了很久,都没找到具体的。见到最多资料就是: https://github.com/loune/php-ntlm 不过ntlm_prompt("testwebsite", "testdomain", "mycomputer", "testdomain.local", "mycomputer.local", "get_ntlm_user_hash"); 好像没有具体的用户名与密码,测试的时候还是在游览器弹出窗口要求输入用户名密码。在其他地方都没找到可用了。后来看CURL里面有个--ntlm,一测试,原来还这么简单的。

        $url = 'http://xxxx.com/HomePage/info.aspx';//注意:是要获取信息的页面地址,不是登录页的地址。
$user ='test';
$password ='testpwd';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true); //加上这可以获取cookies,就是输出的$result的前面有header信息
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, $user.':'.$password);
$result = curl_exec($ch);
preg_match_all ('/^Set-Cookie: (.*?);/m',$result,$m); //获取cookies
var_dump($m);

.Net的获取方式也很简单,代码如下:

try
{
CredentialCache MyCredentialCache = new CredentialCache();
MyCredentialCache.Add(new Uri("http://www.xxx.com/infot.aspx"), "NTLM", new NetworkCredential("test", "testpwd", "domain"));
HttpWebRequest req;
req = (HttpWebRequest)HttpWebRequest.Create("http://www.xxx.com/info.aspx");
req.Method = "GET";
req.KeepAlive = true;
req.Credentials = MyCredentialCache;
//保存cookie
CookieContainer cc = new CookieContainer();
req.CookieContainer = cc;
HttpWebResponse res;
res = (HttpWebResponse)req.GetResponse();
Console.WriteLine(res.StatusCode);
Console.WriteLine("------------------------");
Console.WriteLine(res.Headers.ToString());
if (res.StatusCode == HttpStatusCode.OK)
{
//验证成功
Console.WriteLine(res.StatusCode); }
}
catch (Exception ex)
{
//验证失败 }

Python:python-ntlm(官网地址:http://code.google.com/p/python-ntlm/)是一个用来访问NTLM认证网址的module, 代码的那边搬过来的。我测试可用:

    url = "http://www.xxx.com/info.aspx"  #就是注意这个是获取信息的地址。不是登录的。刚开始测试用的登录的地址。那样是不行的。
user = u'randy\\test'
password = 'testpwd' passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
# create the NTLM authentication handler
auth_NTLM = HTTPNtlmAuthHandler(passman) # create and install the opener
opener = urllib2.build_opener(auth_NTLM)
urllib2.install_opener(opener) # retrieve the result
response = urllib2.urlopen(url)
print(response.info())
print(os.path.join(os.getcwd(),"1.txt"))
#outfile = open(os.path.join(os.getcwd(),"1.htm"), "w")
#outfile.write(response.read())

[转]关于NTLM认证的.NET,php,python登录的更多相关文章

  1. iOS进行Basic认证与NTLM认证

    一.iOS进行Basic认证 只需要在NSMutableURLRequest的Header中添加认证所需的Username和password. NSMutableURLRequest *webReq ...

  2. NTLM认证协议及SSPI的NTLM实现

    没错,NTLM就是你听说过的那个NTLM.是微软应用最广泛的认证协议之一. NTLM是NT LAN Manager的缩写,这也说明了协议的来源.NTLM 是 Windows NT 早期版本的标准安全协 ...

  3. 域渗透基础之NTLM认证协议

    域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...

  4. python登录验证程序

    自己写的一个python登录验证程序: 基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失 ...

  5. 用python登录远程salt,并执行命令

    用python操作saltstack,如果是在本地,则可以用python的salt模块,但如果要操作远程saltstack,则不行,今天就来看看怎么操作. 用python操作远程的saltstack, ...

  6. selenium(python)登录时账号密码错误提示语

    selenium(python)登录时账号密码错误提示语的获取 可以用text

  7. 教育改革——国家认证 “网红” 编程语言 Python

     特大消息!!!  不止是上海计算机二级考试 ,全国计算机考试等级考试也有要求 如果你正打算考计算机等级,那你需要学习以下知识 要求学习的知识太多了,我就不一一在这里展示了! 一.考试改革的目标 据悉 ...

  8. 聊聊NTLM认证协议

    近期发现多家安全媒体发布NTLM协议漏洞的文章.他们越说越术语,越说越官方,如此这般下去,他们写出来到底给谁看?大雅就是俗,让我来一篇俗文.啥是NTLM呢?微软windows系统的用户账号存储密码哈希 ...

  9. 记录使用Python登录浙江大学统一身份认证

    背景 现在每天要进行健康情况上报,但是因为经常睡过头忘记打卡,于是想着写一个程序来自动打卡. 统一身份认证 访问健康情况上报页面(https://healthreport.zju.edu.cn/nco ...

随机推荐

  1. await使用中的阻塞和并发(二)

    本文继续上篇未完成的讨论,通过将Lambda还原成最普通的代码段,来解释上篇提出的疑问.并更正上篇中一些不太正确的写法.最后会给出无需等待Async方法返回值时,对Async方法使用await的建议, ...

  2. Websphere中获取项目下.properties路径

    一:如果容器为Websphere,那下面为红色的地方不能加"/",如果为tomcat,则加上"/", String  path = this.class.get ...

  3. Java : java.util.ConcurrentModificationException

    在删除 List 元素的时候,要用 Iterator,不要直接遍历 List,否则会出现 Fatal Exception: java.util.ConcurrentModificationExcept ...

  4. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...

  5. [Objective-C语言教程]扩展(30)

    类扩展与类别有一些相似之处,但它只能添加到编译时具有源代码的类中(类与类扩展同时编译). 类扩展声明的方法是在原始类的实现块中实现的,因此不能在框架类上声明类扩展,例如Cocoa或Cocoa Touc ...

  6. linux中rc.d目录下的文件

    参考 http://blog.sina.com.cn/s/blog_414d78870102vqj5.html http://www.360doc.com/content/12/0820/17/933 ...

  7. Lambda入门

    Lambda 来源于微积分数学中的 λ,其涵义是声明为了表达一个函数具体需要什么. Table of contents Introduction 使用 Introduction 什么是Lambda? ...

  8. 代码 | 自适应大邻域搜索系列之(3) - Destroy和Repair方法代码实现解析

    前言 上一篇文章中我们具体解剖了ALNS类的具体代码实现过程,不过也留下了很多大坑.接下来的文章基本都是"填坑"了,把各个模块一一展现解析给大家.不过碍于文章篇幅等原因呢,也不会每 ...

  9. SP9098 LCS3

    题目链接 题意分析 \(olinr\) : 序列自动机+一系列的鬼畜操作 相信我 你们没人能切 \(lzxkj\) : \(2^m+vector+\)暴力二分 跑得比你正解还快 首先一看\(m≤5\) ...

  10. sort函数详解(史上最完整QAQ)

    1.sort 使用:#include <algorithm>   using namespace std; 作用:排序 时间复杂度:n*lg(n) 实现原理:sort并不是简单的快速排序, ...