From aecbb2ffad1407d3aca4102ef34cd72a0cc18963 Mon Sep 17 00:00:00 2001 From: Chenx221 Date: Tue, 5 Sep 2023 19:39:07 +0800 Subject: [PATCH] init --- .idea/.gitignore | 8 + .idea/CT_Captive_Portal_AutoLogin.iml | 10 ++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + main.py | 138 ++++++++++++++++++ 7 files changed, 180 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/CT_Captive_Portal_AutoLogin.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 main.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/CT_Captive_Portal_AutoLogin.iml b/.idea/CT_Captive_Portal_AutoLogin.iml new file mode 100644 index 0000000..74d515a --- /dev/null +++ b/.idea/CT_Captive_Portal_AutoLogin.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..59b77c7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5eccb5e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..6f306c2 --- /dev/null +++ b/main.py @@ -0,0 +1,138 @@ +import urllib.parse +import requests +import logging + +# 日志 +logger = logging.getLogger() +logger.setLevel(logging.INFO) +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.INFO) +logger.addHandler(console_handler) +file_handler = logging.FileHandler('output.log') +file_handler.setLevel(logging.INFO) +logger.addHandler(file_handler) + +username = input("请输入用户名: ") +password = input("请输入密码: ") + +# 登陆凭证 +# username = '' +# password = '' + +# 测试用途 +JSESSIONID = '' +DEBUGINFO = 0 + + +def logout(): + logout_url = "http://106.60.4.60:8016/logoutServlet" + logout_headers = { + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "Accept-Language": "en-US,en;q=0.9", + "Cache-Control": "max-age=0", + "Proxy-Connection": "keep-alive", + "Cookie": f"JSESSIONID={JSESSIONID}", + "Referer": f"http://106.60.4.60:8016/style/enterprise/pc/logon.jsp?paramStr={param_str}", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" + } + logout_data = { + "bOffline": "", + "paramStr": urllib.parse.unquote(param_str), + } + logout_response = requests.post(logout_url, headers=logout_headers, data=logout_data) + + if DEBUGINFO == 1: + logger.info("登出调试信息:" + logout_response.text) + + if logout_response.status_code == 200: + logger.info("成功登出") + else: + logger.error("登出失败") + + +url = 'http://www.msftconnecttest.com/redirect' +headers = { + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'en-US,en;q=0.9', + 'Proxy-Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' +} + +response = requests.get(url, headers=headers, verify=False) +if DEBUGINFO == 1: + logger.info("初始化调试信息:" + response.text) + +search_string = 'src="/style/enterprise/pc/index.jsp?paramStr=' +if response.text.find(search_string) == -1: + logger.info("看起来已经连接上了网络") +else: + if JSESSIONID == '': + JSESSIONID = response.cookies['JSESSIONID'] + logger.info("JSESSIONID:" + JSESSIONID) + + # Decode URL + encoded_url = response.text.split(search_string)[1].split('"')[0] + decoded_url = urllib.parse.unquote(encoded_url) + logger.info("encoded_url:" + encoded_url) + + pre_login_url = "http://106.60.4.60:8016/style/enterprise/pc/index.jsp" + pre_login_params = { + "paramStr": encoded_url + } + pre_login_headers = { + "Proxy-Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "Referer": response.url, + "Accept-Language": "en-US,en;q=0.9", + "Cookie": f"JSESSIONID={JSESSIONID}", + } + pre_login_response = requests.get(pre_login_url, params=pre_login_params, headers=pre_login_headers) + + login_url = "http://106.60.4.60:8016/authServlet" + login_headers = { + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "Accept-Language": "en-US,en;q=0.9", + "Cache-Control": "max-age=0", + "Proxy-Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Cookie": f"JSESSIONID={JSESSIONID}", + "Origin": "http://106.60.4.60:8016", + "Referer": pre_login_response.url, + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" + } + + login_data = { + "UserType": "2", + "province": "", + "paramStr": decoded_url, + "pwdType": "2", + "UserName": username, + "PassWord": password + } + + login_response = requests.post(login_url, headers=login_headers, data=login_data) + + if DEBUGINFO == 1: + logger.info("登录调试信息:" + login_response.text) + + # 检查响应状态码 + logger.info(login_response.status_code) + if login_response.status_code == 200: + if "login_fail.jsp" in login_response.url: + logger.error("登录失败,请检查登陆凭证是否正确或账号是否异常") + elif "logon.jsp" in login_response.url: + logger.info("login success") + param_str = login_response.url.split("paramStr=")[-1] + # 准备登出 + while True: + user_input = input("是否退出登录?(y/n): ") + if user_input.lower() == "y": + logout() + break + else: + logger.error(login_response.status_code)