上网需要账号认证而且在凌晨系统就会自动将账号踢下线。一家叫Sangfor做的客户端不安它就上不了网。需要远程查看设备状态掉线了就连不进来了。找人去申请长时间在线结果是1天1掉线之前还是两天1掉线。基础的东西要告诉ai然后让它用python编个程序检查。登录网址填个错误的密码点提交用F12查看得到地址。RC4 加密分析网页里的js代码找出来让ai改。运行效果源代码importasyncioimporttimeimportaiohttpimportjsonfromcoloramaimportFore,Back,Style,initfromdatetimeimportdatetime init(autoresetTrue)# 配置区域 # 请在此处修改实际的登录地址、用户名和密码LOGIN_URLhttp://192.0.1.1/ac_portal/login.phpUSERNAMEfuyaozhishang9wanliPASSWORD*******# 时间配置 (单位秒)CHECK_INTERVAL_NORMAL300# 正常检查间隔300秒CHECK_INTERVAL_RETRY100# 重试间隔100秒NETWORK_CHECK_URLhttps://www.baidu.com# defdo_encrypt_rc4(src,passwd): RC4 加密函数 (同步函数执行非常快不影响异步性能) src_strstr(src).strip()passwd_strstr(passwd)key[0]*256sboxlist(range(256))plenlen(passwd_str)sizelen(src_str)foriinrange(256):key[i]ord(passwd_str[i%plen])j0foriinrange(256):j(jsbox[i]key[i])%256sbox[i],sbox[j]sbox[j],sbox[i]output[]a0b0foriinrange(size):a(a1)%256b(bsbox[a])%256sbox[a],sbox[b]sbox[b],sbox[a]c(sbox[a]sbox[b])%256ksbox[c]char_codeord(src_str[i])tempchar_code^k hex_strformat(temp,x)iflen(hex_str)1:hex_str0hex_streliflen(hex_str)0:hex_str00output.append(hex_str)return.join(output)defget_current_time():获取当前格式化时间returndatetime.now().strftime(%Y-%m-%d %H:%M:%S)asyncdefcheck_network(session): 异步检查网络是否正常 (通过访问百度) 返回: True (正常) / False (异常) try:# 设置较短的超时时间避免长时间等待asyncwithsession.get(NETWORK_CHECK_URL,timeoutaiohttp.ClientTimeout(total10))asresponse:ifresponse.status200:returnTruereturnFalseexceptExceptionase:# 打印简短的错误信息供调试但不阻断流程# print(f [调试] 网络检查异常: {e})returnFalseasyncdefdo_login(session): 执行异步登录操作 返回: True (登录成功) / False (登录失败) print(f[{get_current_time()}] 正在尝试登录认证...)# 1. 生成加密数据rckeystr(int(time.time()*1000))encrypted_pwddo_encrypt_rc4(PASSWORD,rckey)payload{opr:pwdLogin,userName:USERNAME,pwd:encrypted_pwd,auth_tag:rckey,rememberPwd:1}headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36,X-Requested-With:XMLHttpRequest}try:asyncwithsession.post(LOGIN_URL,datapayload,headersheaders,timeoutaiohttp.ClientTimeout(total10))asresponse:# 先获取 HTTP 状态码ifresponse.status200:# 【核心修改】先获取文本内容而不是直接 json()# response.text() 返回的是字符串text_contentawaitresponse.text()# 尝试解析为 JSON (兼容原逻辑)try:datajson.loads(text_content)# 使用 json.loads 解析字符串print(f响应内容{text_content})ifdata.get(success):print(f{Back.GREEN}[{get_current_time()}] √ 登录成功)returnTrueelse:print(f{Back.RED}[{get_current_time()}] x 登录失败:{data.get(msg,服务器返回错误)})returnFalseexcept(json.JSONDecodeError,ValueError):# 【核心修改】如果不是 JSON执行这里的逻辑# 情况 A: 服务器可能直接返回了一个 URL 字符串# 判断是否包含 http (简单判断)ifhttpintext_contentandlen(text_content)200:print(f[{get_current_time()}] √ 登录成功 (服务器返回URL:{text_content}))# 如果需要跳转可以在这里处理 text_contentreturnTrue# 情况 B: 服务器返回了 HTML 网页 (例如直接跳转到了首页)# 可以通过判断是否包含 /html 或特定关键字elifhomepageintext_contentorindexintext_content:print(f[{get_current_time()}] √ 登录成功 (服务器返回了网页内容))returnTrue# 情况 C: 未知的文本内容else:print(f[{get_current_time()}] x 登录失败: 服务器返回非JSON数据)# 打印前100个字符方便调试print(f 返回内容摘要:{text_content[:100]}...)returnFalseelse:print(f[{get_current_time()}] x 登录失败: HTTP状态码{response.status})returnFalseexceptExceptionase:print(f[{get_current_time()}] x 登录请求异常:{e})returnFalseasyncdefmain_loop(): 主控制循环 print(f[{get_current_time()}] 程序启动初始化会话...)# 使用 aiohttp.ClientSession 保持会话asyncwithaiohttp.ClientSession()assession:whileTrue:# 1. 检查网络状态# print(f[{get_current_time()}] 正在进行网络连通性检查)is_net_okawaitcheck_network(session)ifis_net_ok:print(f{Fore.GREEN}[{get_current_time()}] 网络正常。)# 网络正常休眠后进行下一次检查wait_timeCHECK_INTERVAL_NORMALelse:# 网络异常尝试登录print(f[{get_current_time()}] ⚠ 网络异常)login_successawaitdo_login(session)iflogin_success:# 登录成功恢复正常检查周期wait_timeCHECK_INTERVAL_NORMALelse:# 登录失败进入快速重试周期 (5分钟)print(f[{get_current_time()}] 将在 5 分钟后重试...)wait_timeCHECK_INTERVAL_RETRY# 2. 异步休眠不阻塞系统# 使用 asyncio.sleep 而不是 time.sleepprint(f[{get_current_time()}] 等待{wait_time/60:.0f}分钟后进行下一次任务...)awaitasyncio.sleep(wait_time)if__name____main__:try:# 运行异步主循环asyncio.run(main_loop())exceptKeyboardInterrupt:print(f\n[{get_current_time()}] 用户手动停止程序。)注代码问智谱4.7写的.