一个用于与蝙蝠聊天(Batchat)API交互的Python客户端,实现了SRP(Secure Remote Password)认证协议。
这个项目提供了一个Python客户端,用于与蝙蝠聊天(Batchat)的API进行交互。它实现了完整的SRP认证流程,包括登录、Token管理、群组和成员信息查询等功能。
- ✅ SRP认证:实现了完整的SRP-6a协议,确保安全的远程密码认证
- ✅ 自动登录:支持Token持久化和自动续期
- ✅ 群组管理:查询群组列表和群成员信息
- ✅ 配置管理:支持配置文件保存登录状态
- ✅ 错误处理:完善的错误处理和重试机制
- ✅ Socket通信:支持通过Socket进行用户登录查询
batchat/
├── BatClient.py # 主客户端类,包含所有API调用逻辑
├── SRP.py # SRP客户端实现,处理加密认证
├── config.json # 配置文件(存储登录凭据和Token)
├── README.md # 项目说明文档
└── .gitignore # Git忽略文件
- Python 3.7+
- 依赖包:
requestsblackboxprotobuf
pip install requests blackboxprotobuf- 初始化客户端
from BatClient import BatClient
# 使用配置文件初始化
client = BatClient(
xid="你的xid",
pwd="你的密码",
imei="设备IMEI",
config_file="config.json"
)- 登录并获取Token
# 自动登录(如果Token过期会自动重新登录)
credentials = client.login()
if credentials:
print(f"登录成功!UID: {credentials['uid']}")- 查询群组列表
groups = client.groupListQuery()
print(f"群组数据: {groups}")- 查询群成员
group_id = 12345678 # 替换为实际的群ID
members = client.groupMemberListQuery(group_id)
print(f"群成员: {members}")配置文件 config.json 存储登录状态:
{
"token": "登录Token",
"uid": "用户ID",
"login_time": 登录时间戳,
"xid": "用户xid",
"imei": "设备标识",
"pwd": "密码"
}注意:密码在配置文件中以明文存储,建议在实际使用中加密存储。
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
| xid | str | 用户xid | 是 |
| pwd | str | 用户密码 | 是 |
| imei | str | 设备IMEI | 是 |
| config_file | str | 配置文件路径 | 否(默认:"batclient_config.json") |
login(): 执行登录流程,返回Token和UIDgroupListQuery(): 查询用户所在的群组列表groupMemberListQuery(group_id): 查询指定群组的成员列表send_request(endpoint, pb_data_hex): 发送原始Protobuf请求
实现了SRP-6a协议的客户端部分,用于安全的密码认证。
- 用户Srp1查询:客户端发送公钥A,服务器返回盐值s、服务器公钥B等
- 计算会话密钥:客户端使用SRP算法计算会话密钥S
- 登录签名查询:客户端发送计算出的M1值进行验证
- 用户登录查询:通过Socket连接获取最终的登录Token
- 使用Protobuf进行数据序列化
- 支持HTTP和Socket两种通信方式
- 实现了完整的错误处理和重试机制
- 支持Token自动续期
- 安全性:配置文件中的密码以明文存储,建议在生产环境中加密存储
- Token有效期:Token默认有效期为7天,过期后需要重新登录
- 设备标识:IMEI是设备唯一标识,需要从抓包数据中获取
- API变更:API接口可能随时变更,需要根据实际情况调整
- 在
BatClient类中添加新的方法 - 构建对应的Protobuf数据结构
- 使用
send_request方法发送请求 - 处理响应数据
- 启用详细日志输出
- 使用抓包工具(如Charles、Fiddler)分析网络请求
- 参考
BatClient.py中的示例代码
欢迎提交Issue和Pull Request!
- Fork本仓库
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启Pull Request
本项目采用MIT许可证。详见 LICENSE 文件。
如果你对这个项目感兴趣,想要进行技术交流,欢迎联系我:
- 微信: __int64
- QQ: 1415662711
- GitHub: luotron
期待与各位开发者交流学习!
免责声明:本项目仅供学习和研究使用,请勿用于非法用途。使用本项目产生的任何后果由使用者自行承担。