记录 制作校园网登陆脚本 python编写 附源码

‘’‘

首先我们分析一下

  1.需要本机的IP

    使用 socket 获取

  2.需要向服务器提交的数据

    构造请求数据 并分析数据可替换

  3.检测登陆成功

    检测登陆是否成功

’‘’

获取IP  这样会返回 本机IP

    def get_ip(self):
        try:
            s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            s.connect(('8.8.8.8',80))
            ip = s.getsockname()[0]
        finally:
            #关闭
            s.close()
            #返回IP
        return ip

构造请求体

1         b_data = {
2             'DDDDD':',0,'+us+codeinfo,
3             'upass':pa,
4             'para':'00',
5             '0MKKey':'123456'
6 
7         }
8 
9       #关于发送的请求内容 可以使用浏览器 F12 进行查看发送的数据信息

 

向服务器发送请求

        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.204 Safari/537.36',
            'Upgrade-Insecure-Requests': '1',
        }
      #data为请求体 ip 为本机ip url
= requests.post('http://172.16.1.38:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=172.16.1.38&iTermType=1&wlanuserip={}&wlanacip=null&wlanacname=null&mac=00-00-00-00-00-00&ip={}&enAdvert=0&queryACIP=0&jsVersion=2.4.3&loginMethod=1'.format(ip,ip),headers=headers,data=data)

 

#这样是一个简单的发送请求   但是如果别人想用的话每次更改不会很麻烦嘛? 

更改后的全部源码  1 import requests  2  3 import socket  4

  5 import os
  6 import re
  7 
  8 class AOA(object):
  9     #获取本机IP
 10     def get_ip(self):
 11         try:
 12             s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
 13             s.connect(('8.8.8.8',80))
 14             ip = s.getsockname()[0]
 15         finally:
 16             #关闭
 17             s.close()
 18             #返回IP
 19         return ip
 20 
 21 
 22     def open_msg(self,path_dirs):
 23         '''
 24         获取外部的text 文档 的账号密码
 25         :return:
 26         '''
27 if 'login_msg' in os.listdir(path_dirs): #如果login_msg文件 有的话 会 跳过 【如果登陆过一次的话 会生成文件】 28 pass 29 else:                      #没有login_msg文件的话 证明为第一次登陆 30 username = input('请输入账号') 31 password = input('请输入密码') 32 code = input('请选择运营商 1 = 移动 | 2 = 电信 | 3 = 联通') 33 print('正在进行保存') 34 with open('login_msg','w+',encoding='utf8') as o: 35 o.write('账号={},\r密码={},\r运营商={},\r#注意不要有空格'.format(username,password,code))  #进行保存文件处理 36 37 with open(os.path.join(path_dirs,'login_msg'),'r+',encoding='utf8') as f :    #打开文件
38 #获取文件的账号密码和运行商
          text = f.read() 39 username = re.findall(r'账号=(\d{10}),',text)[0] if re.findall(r'账号=(\d{10}),',text) else print('账号获取错误') 40 password = re.findall(r'密码=(.*?),',text)[0] if re.findall(r'密码=(.*?),',text) else print('密码获取错误') 41 login_code =re.findall(r'运营商=([1-3]),',text)[0] if re.findall(r'运营商=(.*?),',text)[0] else print('运营商获取错误') 42 msg = { 43 'username':username, 44 'password':password, 45 'login_code':login_code, 46 } 47 return msg    #形成字典形式返回数据 48 49 50 def extract_data(self,user_data):    #使数据进行组合处理 51 #拿出账号密码 52 us = user_data.get('username') #账号 53 pa = user_data.get('password') #密码 54 code = int(user_data.get("login_code")) #获取的为整数类型 55 56 if code == 1 : 57 codeinfo = "@cmcc" #移动 58 elif code == 2 : 59 codeinfo = "@telecom" #电信 60 elif code == 3: 61 codeinfo = "@unicom" #联通 62 else: 63 raise '请输入正确的' 64 b_data = { 65 'DDDDD':',0,'+us+codeinfo, 66 'upass':pa, 67 'para':'00', 68 '0MKKey':'123456' 69 70 } 71 return b_data 72                 #进行登陆处理 73 def login(self,data,ip): 74 75 headers = { 76 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.204 Safari/537.36', 77 'Upgrade-Insecure-Requests': '1', 78 } 79 url = requests.post('http://172.16.1.38:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=172.16.1.38&iTermType=1&wlanuserip={}&wlanacip=null&wlanacname=null&mac=00-00-00-00-00-00&ip={}&enAdvert=0&queryACIP=0&jsVersion=2.4.3&loginMethod=1'.format(ip,ip),headers=headers,data=data) 80 81 def if_get(self): 82 code = requests.get('http://www.baidu.com') 83 if code.status_code ==200: 84 print('登陆成功') 85 else: 86 print('登陆失败') 87 88 89 def main(self,): 90 #获取路径 91 LOCAL_PATH = os.path.abspath('') 92 ip = self.get_ip() #获取本机IP 93 user_data_str = self.open_msg(path_dirs=LOCAL_PATH) #获取账号密码信息 不做判断 和 数据整合 94 header_text = self.extract_data(user_data_str) #进行数据整合 95 self.login(data=header_text,ip=ip) 96 self.if_get() 97 98 99 100 j = AOA() 101 j.main()

 

转载于:https://www.cnblogs.com/lianfeng132/p/10767838.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PageAdmin学校网站源码运行环境 服务器要求:Windows+IIs 数据库:Access或Mssql Server 2000或更高版本 .NET版本:.NET2.0/.NET3.5 系统演示:http://school.pageadmin.net 介绍:PageAdmin是一款集成内容发布、信息发布、自定义表单、自定义模型、会员系统、业务管理等功能于一体的企业级网站内容管理系统,于2009年正式发布,目前全国用户已经超过50万以上,被广泛用于企业、中小学、大专院校,政府部门的网站搭建。 PageAdmin特点 1、简单易用、灵活扩展:以前开发一个网站只能找网络公司, 做出的网站管理后台功能简单,导致后期维护、修改和扩展困难,甚至只能付费让制作公司维护,PageAdmin强大的功能、易用性、灵活扩展性完美的解决了这些问题。因为系统经过多年发展,其间综合了大量用户的切身使用体验,大大小小经过上百次的升级更新,在操作上不断追求人性化,功能上在也日趋完善,其中的自定义模型功能更是让用户可以轻松开发出自己的个性化功能。 2、强大的负载功能:一个网站负载功能在网站访问量或内容量巨大时至关重要,pageadmin通过生成静态化和数据库连接优化两个方面来提高网站的负载能力。 2.1、生成静态可以保证用户打开页面时不必连接数据库,从而大大提高页面访问速度和节约服务器资源; 2.2、采用特有的技术手段对每个表的连接都进行优化处理,保证无用字段数据不会被读取,通过实际测试,在采用sqlserver数据库的前提下,pageadmin的子栏目列表页读取100万数据表耗时3秒左右,实际应用中都是有条件的提取数据,所以速度会更快。 3、样式和内容分离:系统主体框架div+css结构,遵循国际最新W3C网页设计标准,兼容IE系列、火狐等主流浏览器,内容和样式分离让网站风格可以轻松修改和更换,而不会导致内容和结构的破坏。 4、周密的安全策略和攻击防护:对SQL参数进行敏感字符过滤、对密码、cookie进行了不可逆加密处理,数据库备份功能、对管理员权限的自由分配等,在方方面面保证了系统的安全和稳定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值