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

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

在访问网站前需要先进行一个登陆,浏览器使用的是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. 2019西湖论剑网络安全技能大赛(大学生组)部分WriteUp

    这次比赛是我参加以来成绩最好的一次,这离不开我们的小团队中任何一个人的努力,熬了一整天才答完题,差点饿死在工作室(门卫大爷出去散步,把大门锁了出不去,还好学弟提了几个盒饭用网线从窗户钓上来才吃到了午饭 ...

  2. Linux useful commands

    cat misc. cat xxx | more cat xxx | less cat > xxx , create a file xxx cat -n xxx | more with line ...

  3. dmi-ipmi

    api,cli,gui,tui,dmi(smbios),ipmi,bios,efi,uefi SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所 ...

  4. 算法笔记 3.2 codeup1935 查找学生信息

    #include <stdio.h> #include <string.h> const int maxn = 1e3; struct student{ ]; ]; //!!! ...

  5. 搭建自己的Docker registry(五)

    弄了一天,在网上查了很多资料,感觉都好复杂好复杂,一步一步踩坑踩出来就好了. 服务器:阿里云(香港) 环境:CentOS Linux release 7.4.1708 (Core) Docker:1. ...

  6. 十六、springcloud(二)Eureka集群

    1.创建子工程spring-cloud-peer(jar) 2.创建application-peer1.properties,application-peer2.properties applicat ...

  7. shell 生成MAC地址

    # cat /dev/urandom |od -x |awk '{print $2,$3,$4}' |head -n 1 |sed -e 's/[[:space:]]//g' -e 's/\(..\) ...

  8. hadoop完全分步式搭建

    实验环境介绍 4台机器,规划如下: 计算机名 IP地址 角色 master 192.168.138.200 NameNode,SecondaryNameNode,ResourceManager sla ...

  9. ASP.NET 4.0 :MasterPage母版页的ClientIDMode属性

    在ASP.NET 4.0之前我们总是要为控件的ClientID头疼,比如明明一个叫lblName的Label放在一个叫做grd的GridView里面后,在页面上改Label的ID就变成了诸如grd_c ...

  10. springboot+mockito 异常解决方案

    系统启动的异常日志如下 javax.net.ssl.* java.lang.IllegalStateException: Failed to load ApplicationContext at or ...