Python模拟校园网登录
最近忙着实验室的项目,学习的时间相对较少。前一段时间刚开始接触python时,依葫芦画瓢照着写了一个爬虫,爬取了某个网站的图片。当看到一张张图片自动出现在电脑屏幕上时,有些小小成就感。我想大多数人开始了解Python学习Python都是从爬虫开始的吧。最近又想着解决用Python实现校园网的自动登录过程,每天登录校园网都要输入学号和密码,没有一个记住密码的功能真是毫无人性。为了偷点懒开始了学习,懒真的是学习的动力。记录一下学习的过程。
1 抓包
其实用Python实现校园网登录已经有很多爱钻研的同学实现了,但是对于我这一个刚了解Python语法的小白来说,代码艰深难懂,再者说每个学校的校园网登录过程也是不同的,别人的代码终究无法直接使用。因此我从基本知识开始学起,再理解代码,再到它山之石可以攻玉。在这些爱钻研同学的博客中,我不断看到抓包这个词。那什么是抓包呢,搜索一下就有答案。
抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全--来自百度百科
意思是明白了,但也只是明白其字面上的意思,对于真正理解还是要去实践才能有更深的体会。
2 Fiddler
Fiddler是一款抓包工具,至于为什么下载了这款软件,也是看推荐的人较多。那么为了实现自动登录校园网的功能,我又开始了学习Fiddler软件的使用。看了这几篇博客也基本有了一个了解。
3 Http请求响应
了解抓包工具的使用还远远不够,看着Fiddler里面展示的数据一头雾水。还得接着学习者软件里展示的是什么数据,数据是什么意思,我需要什么数据。网络知识及其匮乏的我无论搜索什么看到的结果都是新鲜的知识。那么其中最主要的是Http请求和响应了。我又搜索到了以下几篇博客,对于这些也有了一些基本的认识。我们的校园网其实也就是一个Http请求响应的过程,只要知道了请求的网址,请求的数据以及其他相应的要求,模拟登录也就实现了一半了。
感谢网络,感谢这些不仅爱钻研还爱奉献的同学们。
4 Python相关知识
基础性知识前面基本了解的差不多了,剩下的就是实现工具Python的学习了。看了相关同学的代码后,主要使用到了以下三个模块,urllib、urllib2、cookielib。
- urllib 和urllib2都是接受URL请求的相关模块,但是urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。
- urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。目前的大部分http请求都是通过urllib2来访问的。
- cookielib是内置的操作cookie模块,配合urllib、urllib2模块可以轻易地模拟登录、爬取数据了。
对于这些知识,以下博客有比较详尽的介绍。
- python爬虫 - Urllib库及cookie的使用
- 关于Cookie的原理、作用,区别以及使用
- python—cookielib模块对cookies的操作
- python的httplib、urllib和urllib2的区别及用
5 实现
打开我们的Fiddler抓包工具,设置一下Filter,设置Host地址,只抓取登录校园网页面的信息。
打开校园网登录页面,输入账号密码,点击登录。

在Fiddler中我们就可以看到整个的登录过程。
可以看到左边共有4个URL地址,第一个为登录页面网址,但这并不是数据提交请求的URL,因此不是我们需要的URL。第二个URL才是整个实现过程的重点。点击Inspectors按钮,可以看到Post请求的所有信息。上面的URL就是我们模拟登录所需要的URL。下面红色框框起来的就是post的表单数据,我们在模拟的时候需要构造这个表单。中间是我们构造Header所需要的信息。得到这个就可以进行代码的编写啦。参考
# -*- coding: utf-8 -*-
import urllib2
import urllib
import cookielib
# 构建opener
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#posturl,即post方法所提交的url
post_url ='http://202.114.64.105:8080/eportal/userV2.do?method=login¶m=true&wlanuserip=2f4818f809bb03949855832f02b16d5e&wlanacname=1e45aef6b6ca19a225a0ea53d741eeac&ssid=&nasip=5e15ad0ffd6b5c5c547d6756a5026574&snmpagentip=&mac=0b7f9d26b9fca3c8440b6a736dd7cd9d&t=wireless-v2&url=096e8e7059e430e083d28bd1997d6c398f3c08c737495b2fe98713e6195541bf2880d0d92acf2250&apmac=&nasid=1e45aef6b6ca19a225a0ea53d741eeac&vid=bee7bb6a6937bb74&port=a0a45c9f5ae3c42f&nasportid=ac41d60d7f1382084fc1d18ad6536cc7ff1d8558fc05d393faf4237ae4c8c8ab&username=2017xxxxxxxxx&pwd=xxxxxx'
# 根据抓包信息 构造表单
data = {
'is_auto_land': 'false',
'usernameHidden': '2017xxxxxxxxx',
'username_tip': 'Username',
'username': '2017xxxxxxxxx',
'strTypeAu': '',
'uuidQrCode': '',
'authorMode': '',
'pwd_tip': 'Password',
'pwd': 'xxxxxx'
}
post_data = urllib.urlencode(data)
#根据抓包信息构造headers
headers = {
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': '202.114.64.105:8080',
'Referer': 'http://202.114.64.105:8080/eportal/index.jsp?wlanuserip=2f4818f809bb03947c121d8e304df716&wlanacname=1e45aef6b6ca19a225a0ea53d741eeac&ssid=&nasip=5e15ad0ffd6b5c5c547d6756a5026574&snmpagentip=&mac=0b7f9d26b9fca3c8440b6a736dd7cd9d&t=wireless-v2&url=096e8e7059e430e083d28bd1997d6c398f3c08c737495b2fe98713e6195541bf2880d0d92acf2250&apmac=&nasid=1e45aef6b6ca19a225a0ea53d741eeac&vid=bee7bb6a6937bb74&port=a0a45c9f5ae3c42f&nasportid=ac41d60d7f1382084fc1d18ad6536cc7ff1d8558fc05d393faf4237ae4c8c8ab',
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
}
req = urllib2.Request(post_url, post_data, headers)
content = opener.open(req)
#print content.read().decode('gbk').encode('utf-8')
print "连接成功"
代码中涉及账号密码都都用xxx代替。整个代码很简短,但是其中涉及的知识不少,当然这是对于小白来说的。
回顾昨天的学习历程,我只想说感谢互联网,以及感谢这些不仅爱钻研还爱奉献的同学们,是你们的总结让后来的人少走很多弯路。昨天在搜索自动登录校园网的时候,在知乎上看见有人回答这是最简单最基础的问题,实现起来相当easy,我当时想这哪里简单了,完全一头雾水呀。站在今天了解些许相关知识后,我竟然觉得那回答还挺有道理的,的确是调用一下相关的库,构造一下相关的表单、header就OK。加上我们学校的校园网对于密码没有加密,也没有验证码,问题变得更加简单。
懒是学习的动力,而通过实现一些小功能也是不错的学习方法,比起枯燥的看书来得有意思些。继续学习~
Python模拟校园网登录的更多相关文章
- 利用Python模拟GitHub登录
最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fiddler抓包分析 首先,我们想要模拟一 ...
- python 模拟豆瓣登录(豆瓣6.0)
最近在学习python爬虫,看到网上有很多关于模拟豆瓣登录的例子,随意找了一个试了下,发现不能运行,对比了一下代码和豆瓣网站,发现原来是豆瓣网站做了修改,增加了反爬措施. 首先看下要模拟登录的网站: ...
- Python模拟接口登录
参考地址:https://blog.csdn.net/rifengxxc/article/details/77414090 下面讲下关于python模拟登录实验,之前怎么调试也不行,我也是摸索了好久, ...
- python模拟自动登录网站(urllib2)
不登录打开网页: import urllib2 request = urllib2.Request('http://www.baidu.com') response = urllib2.urlopen ...
- 定向爬虫 - Python模拟新浪微博登录
当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息. 模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容. 实现微博登录的方法有很多,一般我们在模 ...
- python模拟艺龙网登录requests包
对比urllib.urllib2与requests不难发现,前者功能更强大,但是实现一个功能要写很多的代码,后者,requests代码简洁,用起来更快速 下面一个模拟登录的代码:看看吧一共也没有几行就 ...
- Python模拟用户登录场景
简单模拟登录场景,将已知的用户名及密码固化,通过用户输入内容和已固化的内容比较进行判断用户名和密码是否输入正确. 在用户输入时,将密码隐藏需要导入模块getpass import getpass _u ...
- python 模拟用户登录代码
需求:输入用户名,判断用户是否被锁定,锁定则退出,否则进入密码验证,输入三次错误密码之后此用户被锁定. userlist.txt里,用":"将用户名.密码.状态码分开: [root ...
- Python模拟用户登录
# coding=utf8 import hashlib db = { 'michael':'e10adc3949ba59abbe56e057f20f883e', 'bob':'878ef96e861 ...
随机推荐
- ArcSDE 10.2 for Oracle 12C安装注意事项
ArcSDE 10.2 for Oracle 12C安装注意事项 1.环境说明 从ArcSDE10.2.1开始支持Oracle 12C. 2.安装注意事项 SDE空间数据库可以安装到PDB中,使用Cr ...
- MFC中利用Opencv与C++抓取摄像头进行人脸识别(Mat)
原文:http://blog.csdn.net/mr_curry/article/details/51098311 第一次写博客哈哈,有些小激动,还请各位大神多多包涵~ 最近的项目需要用到人脸识别,作 ...
- android query 模糊查询
package com.example.utils; import java.util.ArrayList; import android.content.ContentValues; import ...
- icon-font 字体图标的引用
1.font-class引用 font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题. 与unicode使用方式相比,具有如下特点: 兼容性良好, ...
- idea整个项目乱码解决办法
idea前几天还好好的,这两天一直出现乱码.不止一个文件,是整个项目都有这个问题.想想这几天什么也没做啊... 上网搜了下 解决. 经过多次排查寻找,终于,在项目的目录下有个.idea的文件夹,这个文 ...
- SQL点点滴滴_查询类型和索引-转载
当您考虑是否要对列创建索引时, 请估计在查询中使用列的方式, 下表介绍了索引对其有用的查询类型. 表中的示例基于 AdventureWorks2008R2 示例数据库, 在 SQL Server Ma ...
- java、C语言实现数组模拟栈
java: public class ArrayStack { private int[] data; private int top; private int size; public ArrayS ...
- MySQL案例02:ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
MySQL在授权用户时出现报错信息,具体信息如下: 一.错误信息 执行命令: GRANT SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SH ...
- SQL Server 有序GUID,SequentialGuid,
问题描述 有序的GUID性能对比,堪比自增ID integer 一个大神告诉我NEWSEQUENTIALID() 在数据迁移的时候会有问题(感谢大神指点),所以我就深挖一下这个函数. 关于NEWSEQ ...
- .NET预处理器指令
.NET预处理器指令 做开发以来很少接触到这部分内容,基本上没有用到,偶尔在一些框架中和一些开源项目中会见到,常常因为只关心实现逻辑忽略了这部分的功能.现在自己有点时间了,还是希望能够完整的对这部分做 ...