websocket案例 599足球比分
目标地址:
aHR0cHM6Ly93d3cuNTk5LmNvbS9saXZlLw==
接口:
打开控制台 点websocket 刷新页面 显示
分析:
不写理论了
关于websocket 几乎发包位置都是下方图片 不管抖音还是快手 等平台
这里在进行 new WebSocket 后 是要必须走一步的 也就是 new WebSocket('').onopen() 也就是onopen 进行向服务端发送一条信息建立连接
当信息发送后 就正常建立连接 收到数据包 只是这里收到的是 二进制加密数据
要分析WebSocket 建立连接后主动执行什么 就要看 onmessage 这个回调 具体怎么操作的
断到 onmessage 后 可以看到 data就是 服务端向客户端传输的二进制数据
通过单步调试或者关键字搜索可以找到位置
进行单步调试 走到这里后 就已经有返回值了 h.decrypt 就是解密方法
之后往 h.decrypt 里面进 就可以找到解密关键
具体WebSocket的理论细节 包括环境怎么补 请参考 官方文档或者其他论坛
https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket
接下来你通过python把WebSocket代码写完 响应解密也写完后 进行建立连接你会发现一直403 反复查询 自己构建的问题 也没研究明白
其实是因为 WebSocket 进行建立连接的时候 可能需要到了 Cookie 请求头是不显示
当你在传输的时候带上Cookie 中的 ads-tracker-baidu 的值 就成功建立连接了
关于 ads-tracker-baidu 值的生成 来源于 wasm 有兴趣自己研究吧各位
下方为参考代码
import base64
import asyncio
import time
import websockets
import json
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from base64 import b64decodedef AES_(txt):# 假设 c.result 是一个 Base64 编码的字符串key = "777db0c19edfaace".encode('utf-8') # 16 字节的 keyiv = "9876543210599311".encode('utf-8') # 16 字节的 ivcipher = AES.new(key, AES.MODE_CBC, iv)decrypted = cipher.decrypt(base64.b64decode(txt))# 去除 PKCS7 填充plaintext = unpad(decrypted, AES.block_size).decode('utf-8')return plaintextURI = ''async def listen_forever():async with websockets.connect(URI,additional_headers={"Origin": "https://www.599.com","Cache-Control": "no-cache","Accept-Language": "zh-CN,zh;q=0.9,or;q=0.8,en;q=0.7","Pragma": "no-cache",'Cookie': 'ads-tracker-baidu=xxxxxxxxxxxx','sec-websocket-extensions': 'permessage-deflate; client_max_window_bits',"User-Agent": "",}) as ws:print("WebSocket 已连接,开始持续接收数据……")await asyncio.sleep(1) # 等待服务器握手完成await ws.send('{"device":"pc","topic":"USER.topic.app.8"}')while True:try:await asyncio.sleep(1)data = await ws.recv()print("收到消息:", data)print("解密的消息:", AES_(data.decode()))print("<------->")except websockets.ConnectionClosed:print("连接已断开,尝试 5 秒后重连")await asyncio.sleep(5)await listen_forever() # 递归重连asyncio.run(listen_forever())