学校校园网的网络连接有免费连接和收费连接两种类型,可想而知收费连接浏览体验更佳,比如可以访问更多的网站。之前收费地址只能开通包月服务才可使用,后来居然有了每个月60小时的免费使用收费地址的优惠。但是,一旦连接了收费地址而忘记及时断开,60小时会很快用完。 
    为了节约收费地址的使用时间,采用如下方案:每隔1个小时,都在本机上断开校园网的收费连接,同时连接免费连接,这样,每次手动连接收费连接之后,最多使用1个小时,就会被自动断开。

1. python实现连接/断开网络连接 
     通过执行python脚本,实现访问 its.pku.edu.cn 并设置连接/断开。 
通过fiddler抓包,分析从访问 its.pku.edu.cn,到填写账号密码,再到最后登陆成功的过程中,浏览器和网关交互的http request和response。

python代码实现

#!/usr/bin/env python
"""python crawler """
#encoding:UTF-8 import requests
import sys def login(type):
"""login work"""
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch, br',
'Accept-Language': 'zh-CN,zh;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36'}
s = requests.Session()
s.headers = headers
post_data = {'username': 'username', 'password': 'password', 'iprange': type}
r = s.post('https://its.pku.edu.cn/cas/webLogin', data=post_data, verify=False)
print "log in, status = %s" % r.status_code def logout(type):
"""logout work"""
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch, br',
'Accept-Language': 'zh-CN,zh;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36'}
s = requests.Session()
s.headers = headers
post_data = {'username': 'username', 'password': 'password', 'iprange': 'no'}
s.post('https://its.pku.edu.cn/cas/webLogin', data=post_data, verify=False)
#to logout!!
r = s.get('https://its.pku.edu.cn/netportal/ITSipgw?cmd=close&type=%s&sid=478' % type, verify=False, headers=headers)
print "log out, status = %s" % r.status_code if __name__ == '__main__':
if len(sys.argv) != 2:
print "usage <option: 1 (connect free), 2 (connect global), 3 (disconnect this computer), 4 (disconnect all), 5(disconnect this computer and connect free)"
exit(1) option = int(sys.argv[1])
if option == 1:
print "try to connect free"
login('no')
elif option == 2:
print "try to connect global"
login('yes')
elif option == 3:
print "try to disconnect self"
logout('self')
elif option == 4:
print "try to disconnect all"
logout('all')

2. 每1小时自动执行 
    linux下比较方便,直接设置 crontab即可。 
    windows下可以设置机器的自动任务计划,具体步骤如下: 
(1)开始->所有工具->windows管理工具->任务计划程序 
(2)创建任务 
(2.1)常规 ——填写程序名称(随意) 
(2.2)触发器 ——新建,设置为每天固定时间开始执行,每隔一个小时重复一次 

(2.3)操作 ——新建,设置为执行python脚本,且设置正确的命令行参数 (包括python脚本路径和参数5)

Python实现自动登录/登出校园网网关的更多相关文章

  1. flask 实现登录 登出 检查登录状态 的两种方法的总结

    这里我是根据两个项目的实际情况做的总结,方法一(来自项目一)的登录用的是用户名(字符串)和密码,前后端不分离,用form表单传递数据:方法二用的是手机号和密码登录,前后端分离,以json格式传递数据, ...

  2. Django项目: 4.用户登录登出功能

    用户登录登出功能 一.功能需求分析 1. 登录退出功能分析 流程图 功能 登录页面 登录功能 退出功能 二.登录页面 1. 接口设计 接口说明 类目 说明 请求方法 GET url定义 /user/l ...

  3. SpringBoot登录登出切面开发

    阅读本文约“2.5分钟” 本文开发环境是SpringBoot2.X版本. 对于系统而言(这里多指管理系统或部分具备登录登出功能的系统),登录登出是一个类权限验证的过程,现在一般是以token进行校验, ...

  4. Struts2学习第六课 实现登录登出功能

    关于Struts2请求的扩展名问题: 1).org.apache.struts2包下的default.properties中配置了struts2应用的一些常量 2).struts.action.ext ...

  5. ThinkPHP---案例1登录登出和添加部门

    配置文件分3类:系统配置文件,分组配置文件,应用配置文件 ①系统配置文件ThinkPHP/Conf/convention.php: ②分组 / 模块 /平台配置文件Home/Conf/config.p ...

  6. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...

  7. jquery ajax常用的登录登出

    整理jquery+ajax的登录登出方法. //登录 var currentUserId = -1; $(function() { var timestamp = (new Date()).value ...

  8. Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)

    学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学 ...

  9. 利用Vue.js实现登录/登出以及JWT认证

    JSON Web Token 入门教程:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html 后端代码地址:https ...

随机推荐

  1. MapReduce的集群行为和框架

    MapReduce的集群行为 MapReduce的集群行为包括: 1.任务调度与执行MapReduce任务由一个JobTracker和多个TaskTracker两类节点控制完成.(1)JobTrack ...

  2. [转]wait,notify,notifyAll,join,yield,sleep的区别和联系

    1.  Thread.sleep(long) 和Thread.yield()都是Thread类的静态方法,在调用的时候都是Thread.sleep(long)/Thread.yield()的方式进行调 ...

  3. 也许,这样理解HTTPS更容易(今天看到的, 对https总结最好的一篇)

    摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于" ...

  4. iOS边练边学--UINavigationController导航条的使用

    一.使用UINavigationController的步骤以及代码 // 程序加载完成后执行的代码 - (BOOL)application:(UIApplication *)application d ...

  5. C# VS本地Sqlserver 操作笔记

    1.如何连接本地数据库 -- string Info = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirecto ...

  6. 【转】WCF服务的创建和发布到IIS

    一. WCF服务的创建 有两种创建方式: 1.WCF服务库 2.WCF服务应用程序 如下图所示: 这里选择WCF服务库.注意事项: 1.WCF服务库是一个类库项目,这里选择.net 3.5版本(版本高 ...

  7. imx6 电容屏参数更改

    imx6使用电容屏时需要获取对应的usb的event.其中用到了shell的一些命令.分析如下. # inputCheckLine=`cat /proc/bus/input/devices | gre ...

  8. linux -- Apache执行权限

    最近在用php调用exec方法去执行一个linux终端下的命令,结果每次都不能执行成功,网上多番搜寻,最终找到一篇有用的文章,主要原因是因为Apache的执行权限的问题.以下是原文(稍加修改): 利用 ...

  9. linux -- ubuntu桌面版安装xampp

    首先,请从www.xampp.org下载最新版XAMPP. 安装 如果是xampp压缩文件 将xampp压缩文件复制到/opt下并解压.如果你计算机没有/opt目录,用 “sudo mkdir/opt ...

  10. postman从入门到精通

    今天总监让我给测试同事们培训postman,使用过postman的朋友应该知道,这个简直就是前后端接口调试神器.根据平时的经验以及自己到网上看了相关的帖子,对于postman又有了新的认识. post ...