白日梦daydreams 2022-10-02 18:45 采纳率: 100%
浏览 45
已结题

武科大WUST深澜校园网认证问题

书接上回 https://ask.csdn.net/questions/7798607?answer=53928139
在查看F12里的代码后,我写了个Python程序,代码如下:

import hmac
import hashlib
import requests
import socket
import json
import time as Time
time_ = str(Time.time()).split('.')
time = time_[0] + time_[1][1:4]
ip = socket.gethostbyname(socket.gethostname())
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}

username = 'USERNAME' #学号
password = 'PASSWORD' #密码
callback = 'jQuery112402537284455192399_' + time

response_0 = requests.get('http://59.68.177.183/srun_portal_pc',params = {
    'ac_id' : '7',
    'theme' : 'pro'
},headers = header).text

response_1 = requests.get('http://59.68.177.183/v2/srun_portal_message',params = {
    'per-page': '100'
},headers = header).text

response_2 = requests.get('http://59.68.177.183/cgi-bin/rad_user_info', params = {
    'callback': callback,
    '_': int(time)
},headers = header).text

Time.sleep(2)
#此步骤模拟点击登录后的操作,我们只需要此步返回的challenge值
response_3 = requests.get('http://59.68.177.183/cgi-bin/get_challenge', params = {
    'callback': callback,
    'username': username,
    'ip': ip,
    '_': time
},headers = header).text
challenge = json.loads(response_3.replace(callback,'').strip('(').strip(')'))['challenge']


#从服务器获取js运算后的结果,因为懒得把js代码转换成python格式
response = json.loads(requests.get('http://localhost:1231',params = {
    'token' : challenge,
    'info' : '{"username":"'+ username + '","password":"'+ password + '","ip":"' + ip + '","acid":"7","enc_ver":"srun_bx1"}'
}).text)

value = challenge + username
value += challenge + hmac.new(challenge.encode(), password.encode(), hashlib.md5).hexdigest()
value += challenge + '7'
value += challenge + ip
value += challenge + '200'
value += challenge + '1'
value += challenge + '{SRBX1}'+ response['info']
Time.sleep(1)
#模拟登录操作
response_4 = requests.get('http://59.68.177.183/cgi-bin/srun_portal',params = {
    'callback': callback,
    'action': 'login',
    'username': username,
    'password': '{MD5}' + hmac.new(challenge.encode(), password.encode(), hashlib.md5).hexdigest(),
    'os': 'Windows 10',
    'name': 'Windows',
    'double_stack': '0',
    'chksum': hashlib.sha1(value.encode()).hexdigest(),
    'info': '{SRBX1}' + response['info'],
    'ac_id': '7',
    'ip': 'ip',
    'n': '200',
    'type': '1',
    '_': int(time)+1
},headers = header).text

print(response_1 + '\n')
print(response_2 + '\n')
print(response_3 + '\n')
print(challenge + '\n')
print(str(response) + '\n')
print(response_4 + '\n')


其中localhost:1231是我本地搭建的nodeJS服务器,作用与原网站http://59.68.177.183/static/themes/pro/js/Portal.js?v=2.00.20211105 里如下内容所实现的功能一样

var i = _classPrivateFieldGet(_assertThisInitialized(_this), _encodeUserInfo).call(_assertThisInitialized(_this), {
            username: username,
            password: password,
            ip: ip,
            acid: ac_id,
            enc_ver: enc
            }, token);

下面说下我遇到的问题:
在运行该代码后,仍然无法登录校园网
于是我用Fiddler抓了一下包,仔细对比后发现其发的包与浏览器的包应该是一样的
但response_4的返回值却是:

jQuery112402537284455192399_1664703360098({"client_ip":"10.15.12.253","ecode":0,"error":"sign_error","error_msg":"","online_ip":"","res":"sign_error","srun_ver":"SRunCGIAuthIntfSvr V1.18 B20211105","st":1664703397})

正常应是:(个人信息已处理)

jQuery11240670474958295239_1664706869735({"ServerFlag":0,"ServicesIntfServerIP":"172.26.23.173","ServicesIntfServerPort":"8001","access_token":"9448b99bb0b666b54f3116e4420e76f081a42d85141e38fdeacabc2596a4671f","checkout_date":0,"client_ip":"10.15.12.253","ecode":0,"error":"ok","error_msg":"","online_ip":"10.15.12.253","ploy_msg":"E0000: Login is successful.","real_name":"","remain_flux":0,"remain_times":0,"res":"ok","srun_ver":"SRunCGIAuthIntfSvr V1.18 B20211105","suc_msg":"login_ok","sysver":"1.01.20211105","username":"学号","wallet_balance":0})

所以想问问为什么登录不成功啊,望详细解答
对了,深澜版本号 SRunCGIAuthIntfSvr V1.18 B20211105
可能有用的链接https://blog.csdn.net/qq_41797946/article/details/89417722
新手写的代码,可能不怎么好读,请见谅

  • 写回答

1条回答 默认 最新

  • 白日梦daydreams 2022-10-08 17:38
    关注

    已解决。

    在response_0和response_1的请求中加入正确的headers即可,注意这个headers不是response_3和response_4用的header,要自己去浏览器获取

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月16日
  • 已采纳回答 10月8日
  • 修改了问题 10月2日
  • 创建了问题 10月2日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改