之前帮公司爬取过内部的一个问题单网站,要求将每个问题单的下的附件下载下来。一开始的时候我就遇到一个破解登陆验证的大坑......      (╬ ̄皿 ̄)=○

由于在公司使用的都是内网,代码和网站的描述也都属于公司的信息安全资产范围,具体细节不方便透露,就简要描述一下需求和问题吧。

在访问网站前需要先进行一个登陆,浏览器使用的是chrome,一开始我的想法是通过chromrdriver模拟登陆,但是用户名和密码输入框都是使用的浏览器自带的弹窗,chromedriver无法获取到输入和点击位置。放弃这个想法后我就想着模拟一个请求头去发送请求破解的方式,但是直接F12后还是没法从头信息中获取到登陆验证的方式。。。。由于之前压根没接触过爬虫,对前端知识和网络协议也不太了解,当场直接自闭了!!!

皇天不负有心人,最后通过Fiddler抓包,终于获取到了登陆验证的方式。网站是通过ntml方式来验证登陆的。废话不多说直接上代码(网址和账号密码信息请自行修改)

 # -*- coding:utf-8 -*-
# author: cdc
# date: 2019/1/20 import ntlm3
import urllib.request def login(url,username,password):
passman = urllib.request.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None,url,username,password)
auth_NTLM = ntlm3.HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)
opener = urllib.request.build_opener(auth_NTLM)
urllib.request.install_opener(opener)
response = urllib.request.urlopen(url)
return response if __name__ == "__main__":
url = r'http://dts.huawei.com'
username = 'cwx589809'
password = 'cdc19951216tr,!'
res = login(url,username,password)
print(res)

但是还是无法破解登陆问题,获取的返回信息状态还是400。是的,忙活了半天我再一次自闭了!!!

再一次在发送登陆请求的时候用Fiddler去抓包,发现auth_header值中有字段'negotiate',而我又对比了下python-ntml3中的源码,返现python-ntml3库中AbstractNtlmAuthHandler类的http_error_authentication_required方法中并没有对这个值进行判断。

源码:

将这一行的代码改成:

if auth_header_value is not None and (
'ntlm' in auth_header_value.lower() or 'negotiate' in auth_header_value.lower()):

此外,网页返回的信息都是string类型的,而源码中统一处理的都是bytes对象,因此还需对源码的两处进行一个解码的操作

源码:

将这两处改为:

# line_num:58
auth = 'NTLM %s' % bytes.decode(ntlm.create_NTLM_NEGOTIATE_MESSAGE(user, type1_flags)) # line_num:108
auth = 'NTLM %s' % bytes.decode(ntlm.create_NTLM_AUTHENTICATE_MESSAGE(ServerChallenge, UserName, DomainName, pw, NegotiateFlags))

小结一下:

首先这个只是针对我们公司内部开发的网站的一个问题,其他网站的auth_header或许只有'ntml'或者其他的值,这个需要大家自己根据实际的需求去修改;

其次或许还有其他的更好的破解此类登陆的方式,也希望大家一起学习分享(鄙人刚入门小白一个)。

PS:Fiddler真尼玛好用,抓包神器名不虚传!

完结撒花,掰掰!

Python学习—爬虫篇之破解ntml登陆问题的更多相关文章

  1. Python学习——爬虫篇

    requests 使用requests进行爬取                 下面是我编写的第一个爬虫的脚本                   import requests # 导入reques ...

  2. Python学习第一篇

    好久没有来博客园了,今天开始写自己学习Python和Hadoop的学习笔记吧.今天写第一篇,Python学习,其他的环境部署都不说了,可以参考其他的博客. 今天根据MachineLearning里面的 ...

  3. [Python学习]错误篇二:切换当前工作目录时出错——FileNotFoundError: [WinError 3] 系统找不到指定的路径

    REFERENCE:<Head First Python> ID:我的第二篇[Python学习] BIRTHDAY:2019.7.13 EXPERIENCE_SHARING:解决切换当前工 ...

  4. [Python学习]错误篇一

    REFERENCE:<Head First Python> ID:我的第一篇[Python学习] BIRTHDAY:2019.7.6 EXPERIENCE_SHARING:两个程序错误类型 ...

  5. Python学习—基础篇之文件操作

    文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...

  6. Python学习 - 入门篇2(更新中)

    前言 学习渠道:慕课网:Python进阶 记录原因:我只是想边上课边做笔记而已,呵呵哒 食用提示:教程环境基于Python 2.x,有些内容在Python 3.x中已经改变 函数式编程 定义:一种抽象 ...

  7. Python学习 - 入门篇1

    前言 学习渠道:慕课网:Python入门 记录原因:人总归要向记忆低头[微笑再见.gif] 记录目标:形成简洁的知识点查阅手册 变量和数据类型 变量 赋值 在Python中,可以把任意数据类型赋值给变 ...

  8. Python学习——BeautifulSoup篇

    BeautifulSoup     Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beau ...

  9. Python学习 —— 爬虫入门 - 爬取Pixiv每日排行中的图片

    更新于 2019-01-30 16:30:55 我另外写了一个面向 pixiv 的库:pixiver 支持通过作品 ID 获取相关信息.下载等,支持通过日期浏览各种排行榜(包括R-18),支持通过 p ...

随机推荐

  1. 如何将docker镜像文件上传至Docker Hub

    一.Docker Hub中新建存储库 注册,登录Docker Hub之后,点击右上角Create Repository,创建存储库,如下图所示: 取个名字,我这里取名为lihui_demo.并且可以选 ...

  2. Redis无法启动

    我的原因是:没有足够的可用空间 以往双击redis-server.exe就可以启动,但突然启动不了,只是弹出控制台一闪而过,之后就自动关闭了, 因为没看到具体错误,百度了下关键字”Redis无法启动“ ...

  3. PythonStudy——字符串重要方法 String important method

    # 1.索引(目标字符串的索引位置) s1 = '123abc呵呵' print(s1.index('b')) # 2.去留白(默认去两端留白,也可以去指定字符) s2 = '***好 * 的 *** ...

  4. ILBC 规范

    本文是 VMBC / D# 项目 的 系列文章, 有关 VMBC / D# , 见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>) https://w ...

  5. ueditor的简单用法

    先粘贴未使用ueditor之前的代码: <body> <label for="input_content">作答区:</label> <t ...

  6. OpenSSL-Win32,rsa,私钥,公钥,1024,2048

    默认是rsa_private_key1024.pem , PEM格式私钥,C# ,PHP 用. 再生成 pkcs8 格式私钥, JAVA 用. 公钥无格式区分. 1024 的: openssl.exe ...

  7. 【python】self & cls

    转自 python中self,cls 普通的方法,第一个参数需要是self,它表示一个具体的实例本身. 如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用 ...

  8. 1、根"/"目录结构

    1.目录结构 FSH [root@localhost /]# tree -L . ├── bin -> usr/bin #普通用户使用的命令 ├── boot #存放系统启动相关文件,例如ker ...

  9. WebHttpRequest在sharepoint文档库中的使用

    写在前面 由于sharepoint服务器上的站点采用的域用户windows认证的方式登陆,而app项目虽然能够提供用户名和密码,但客户是不愿意在网络上这样传输的.所以给提供了使用ssl证书认证的方式. ...

  10. text-transform CSS

    text-transform  控制文本的大小写(只对英文起作用,对汉字无效) Example: <p class="p1">This is an HI Element ...