news 2026/4/24 23:30:19

保持上网认证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保持上网认证

上网需要账号认证,而且在凌晨系统就会自动将账号踢下线。


一家叫Sangfor做的客户端,不安它就上不了网。
需要远程查看设备状态,掉线了就连不进来了。找人去申请长时间在线,结果是1天1掉线,之前还是两天1掉线。
基础的东西要告诉ai,然后让它用python编个程序检查。

登录网址

填个错误的密码,点提交,用F12查看得到地址。

RC4 加密

分析网页里的js代码,找出来让ai改。

运行效果:

源代码

importasyncioimporttimeimportaiohttpimportjsonfromcoloramaimportFore,Back,Style,initfromdatetimeimportdatetime init(autoreset=True)# ================= 配置区域 =================# 请在此处修改实际的登录地址、用户名和密码LOGIN_URL="http://192.0.1.1/ac_portal/login.php"USERNAME="fuyaozhishang9wanli"PASSWORD="*******"# 时间配置 (单位:秒)CHECK_INTERVAL_NORMAL=300# 正常检查间隔:300秒CHECK_INTERVAL_RETRY=100# 重试间隔:100秒NETWORK_CHECK_URL="https://www.baidu.com"# ===========================================defdo_encrypt_rc4(src,passwd):""" RC4 加密函数 (同步函数,执行非常快,不影响异步性能) """src_str=str(src).strip()passwd_str=str(passwd)key=[0]*256sbox=list(range(256))plen=len(passwd_str)size=len(src_str)foriinrange(256):key[i]=ord(passwd_str[i%plen])j=0foriinrange(256):j=(j+sbox[i]+key[i])%256sbox[i],sbox[j]=sbox[j],sbox[i]output=[]a=0b=0foriinrange(size):a=(a+1)%256b=(b+sbox[a])%256sbox[a],sbox[b]=sbox[b],sbox[a]c=(sbox[a]+sbox[b])%256k=sbox[c]char_code=ord(src_str[i])temp=char_code^k hex_str=format(temp,'x')iflen(hex_str)==1:hex_str='0'+hex_streliflen(hex_str)==0:hex_str='00'output.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,timeout=aiohttp.ClientTimeout(total=10))asresponse:ifresponse.status==200:returnTruereturnFalseexceptExceptionase:# 打印简短的错误信息供调试,但不阻断流程# print(f" [调试] 网络检查异常: {e}")returnFalseasyncdefdo_login(session):""" 执行异步登录操作 返回: True (登录成功) / False (登录失败) """print(f"[{get_current_time()}] >>> 正在尝试登录认证...")# 1. 生成加密数据rckey=str(int(time.time()*1000))encrypted_pwd=do_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,data=payload,headers=headers,timeout=aiohttp.ClientTimeout(total=10))asresponse:# 先获取 HTTP 状态码ifresponse.status==200:# 【核心修改】:先获取文本内容,而不是直接 json()# response.text() 返回的是字符串text_content=awaitresponse.text()# 尝试解析为 JSON (兼容原逻辑)try:data=json.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 (简单判断)if'http'intext_contentandlen(text_content)<200:print(f"[{get_current_time()}] √ 登录成功 (服务器返回URL:{text_content})")# 如果需要跳转,可以在这里处理 text_contentreturnTrue# 情况 B: 服务器返回了 HTML 网页 (例如直接跳转到了首页)# 可以通过判断是否包含 </html> 或特定关键字elif'homepage'intext_contentor'index'intext_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_ok=awaitcheck_network(session)ifis_net_ok:print(f"{Fore.GREEN}[{get_current_time()}] 网络正常。")# 网络正常,休眠后进行下一次检查wait_time=CHECK_INTERVAL_NORMALelse:# 网络异常,尝试登录print(f"[{get_current_time()}] ⚠ 网络异常!")login_success=awaitdo_login(session)iflogin_success:# 登录成功,恢复正常检查周期wait_time=CHECK_INTERVAL_NORMALelse:# 登录失败,进入快速重试周期 (5分钟)print(f"[{get_current_time()}] 将在 5 分钟后重试...")wait_time=CHECK_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写的.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 23:26:52

【计算机毕业设计】基于Springboot的精品在线试题库系统设计与实现+LW

博主介绍&#xff1a;✌全网粉丝3W,csdn特邀作者、CSDN新星计划导师、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、…

作者头像 李华
网站建设 2026/4/24 23:26:28

【大模型部署的显存博弈】 深入解析device_map策略与多GPU负载均衡

1. 理解device_map的核心作用 当你第一次尝试在多个GPU上部署大模型时&#xff0c;可能会被各种内存不足的错误搞得焦头烂额。这时候device_map就像是个智能调度员&#xff0c;它决定模型的哪部分该放在哪个GPU上。想象一下搬家时的物品分配&#xff1a;把大件家具均匀分散到不…

作者头像 李华
网站建设 2026/4/24 23:26:20

MPV播放器终极配置指南:5分钟打造专业级高清观影体验

MPV播放器终极配置指南&#xff1a;5分钟打造专业级高清观影体验 【免费下载链接】mpv_PlayKit &#x1f504; mpv player 播放器折腾记录 Windows conf | 中文注释配置 汉化文档 快速帮助入门 | mpv-lazy 懒人包 Win11 x64 config | 着色器 shader 滤镜 filter 整合方案 项目…

作者头像 李华