因为笔者的电脑是一台游戏本,外出携带极其不便,所以我为其配置了远程桌面
但是离谱的校园网有24小时登录有效期的限制,你永远不知道你在外能否成功连上你的电脑
所以开发了这款适用于Dr.com的自动登录脚本
话不多说脚本如下(2023.6.1):
import requests # GET请求使用
import time # 时间戳
import random # 随机生成字符串
import string # 字符串处理
import socket # 获取IP地址
import sys
def create_login_information(): # 登录信息创建程序
print('检测到您可能是第一次使用!\n请按照以下提示创建登录信息:\n')
with open('login_information.inf', 'w') as login_inf:
ip = input('\n请输入您登录服务器的IP地址(带端口号):')
user_account = input('\n请输入您的登录用户名:')
password = input('\n请输入您的登录密码:')
key = input('\n您是否要自动生成一个新的PHPSESSID?(Y/n)')
if key.lower() == "y":
digits = string.ascii_lowercase + string.digits
random_string = ''.join(random.choice(digits) for _ in range(26))
cookie = random_string
print('\n已为您创建一个新的PHPSESSID:'+cookie) # 目测SESSID可能不是必要条件
else:
cookie = input('\n请输入您的PHPSESSID:')
print('\n您的PHPSESSID:'+cookie)
login_inf.write('')
login_inf.write('flag = 1\n')
login_inf.write('ip = '+ip+'\n')
login_inf.write('user_account = '+user_account+'\n')
login_inf.write('password = '+password+'\n')
login_inf.write('PHPSESSID='+cookie)
print('\n登录信息配置程序已完成,请重新执行本程序以开始登录!')
sys.exit (0)
def get_lan_ip(): # 获取您的IP地址(如果您外接了路由器等情况,会导致本程序无法获取正确的主机IP!请手动在下方host_ip变量修改为您的真实IP)
ip = ''
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('10.255.255.255', 0))
ip = s.getsockname()[0]
except Exception as e:
print(e)
finally:
s.close()
return ip
try:
with open('login_information.inf', 'r') as login_inf: #读取存储的登录信息到变量
lines = login_inf.readlines()
try:
flag = lines[0].split('=')[1].strip()
except IndexError:
print('\n\033[31m发生错误!\033[0m\n登录信息已丢失或已损坏,请重新配置登录信息!\n')
create_login_information()
server_ip = lines[1].split('=')[1].strip()
user_account= lines[2].split('=')[1].strip()
password= lines[3].split('=')[1].strip()
cookie= lines[4]
host_ip = '10.71.40.21' #如果无法获取真实IP地址,请手动设置该变量!!!
timestamp = time.time()*1000 # 生成符合格式的时间戳
callback = 'dr'+ str(int(timestamp)) # 合成时间戳(时间戳疑似是不严格校验)
except FileNotFoundError:
create_login_information()
# 合成URL及请求头,如果URL失效了请修改此行格式
# wlan_user_mac、jsVersion啥的可能要根据自身情况测试,您可以使用浏览器F12来抓取URL
url = 'http://'+ server_ip +'/eportal/?c=Portal&a=login&callback='+ callback +'&login_method=1&user_account='+ user_account +'telecom&user_password='+ password +'&wlan_user_ip='+ host_ip +'&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=PTXY-Core&jsVersion=3.0&_='+ str(int(timestamp))
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'close',
'Referer': 'http://'+ server_ip.split(':')[0].strip() +'/',
'Cookie': cookie
}
print('\n请求URL为:\n'+url) # 输出生成的URL
# 开始连接
try:
response = requests.get(url,headers,timeout = 5) #发送请求
print('\n\n\033[32m服务器已应答\033[0m\n'+response.text) # 输出回复报文
if 'result":"0"' in response.text and 'ret_code":"2"' in response.text: # 重复登陆
print('\n\033[31m登录失败!\033[0m\n请检查是否重复登陆!\n注意,该错误也可能是因为您的主机IP地址错误导致的,原因可能是您的IP地址已被其他设备占用,您可以手动修改host_ip变量为您的真实IP地址。')
elif 'result":"0"' in response.text and 'ret_code":"4"' in response.text: # 账号或密码错误
print('\n\033[31m登录失败!\033[0m\n请检查账号密码是否正确!(请编辑或删除目录下的login_information.inf文件)')
elif 'result":"1"' in response.text: # 登陆成功
print('\n\033[32m登陆成功!\033[0m\n登录有效时间为24小时')
else: # 未知报文错误
print('\033[31m结果异常!\033[0m\n请检查请求内容是否有效或是否被BAN\n常见问题:\n1.您的主机IP地址错误,原因可能是您外接了路由器等情况,您可以手动修改host_ip变量为您的真实IP地址。\n2.您的防火墙拦截了该请求。\n')
except requests.exceptions.ConnectionError as e: # 网络问题抛出异常
print('\n\033[31m服务器无应答!\033[0m\n连接断开,可能是目标主机不存在或您的网络连接已断开!\n\n', e)
except requests.exceptions.Timeout as e: # 响应超时
print('\n\033[31m服务器无应答!\033[0m\n响应超时,可能是目标主机不存在或您的网络连接已断开!\n\n', e)
具体配置方法已经写在了Github上,请参照Github完成配置,别忘了送一个Star哦!😊
更新日志
V2.0(2023.9.3)
- 修复了一些描述错误
- 新增重复登录自动注销功能
- 新增自动重试功能
- 重构了部分代码
V1.5(2023.6.1)
- 修复了自动获取主机IP的一个BUG
- 增加了一些错误细节提示
- 考虑到了路由器、代理等情况造成无法正确获取主机IP地址的BUG
V1.4(2023.5.29)
- 修复了主机IP的BUG
V1.3(2023.5.28)
- 修复了一个登录信息配置的BUG
- 增加了登录信息文件校验
- 修复了一个响应判断的BUG
V1.2(2023.5.27)
- 增加了登录信息配置程序
- 自动生成PHPSSID
V1.1(2023.5.26)
- 增加了时间戳校验
- 增加了几个响应错误的反馈
V1.0(2023.5.25)
- 初步实现了自动登录功能
- THE END -
最后修改:2023年9月4日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.kawayi.space/archives/260
共有 0 条评论