记一次修复osu!私服无法连接的问题
起因
约上午12点半有用户反映我们的osu私服无法连接
经测试发现此现象并非个例

问题排查
-我们首先排查了服务器连通性,ping测试完全没有问题
-检查SSL证书配置,无错误
-切换osu客户端的版本,由稳定版切换至其他版本后仍然无法连接

商讨后我们认为是后端bancho.py出现问题,在bancho开发群内询问得到证实,问题出现在bancho api中对于osu客户端版本判断部分

问题分析
在bancho.py中,位于 /app/api/domains/cho.py 中有一段用于反作弊的客户端版本判断,位于:
-第385行:定义常量,90天
DELTA_90_DAYS = timedelta(days=90)
-第497到504行:判断客户端版本时间是否与今日相差超过90天
# disallow login for clients older than 90 days
if osu_version.date < (date.today() - DELTA_90_DAYS):
return {
"osu_token": "client-too-old",
"response_body": (
app.packets.version_update_forced() + app.packets.user_id(-2)
),
}
为了防止作弊,bancho.py会判断用户客户端版本发布的时间是否与登录时间相差超过90天。如果超过90天则会拒绝连接
然而,osu官方(ppy)并没有在距今90天捏推出更新,因此造成服务端反作弊误判
解决方法
方法1:直接注释掉 /app/api/domains/cho.py的第497到504行,即可停止服务端对于客户端版本的判断
方法2(笔者推荐):将第385行的days=90更改为days=180,即可延长支持的时间
DELTA_90_DAYS = timedelta(days=180) #当然,也可以把常量名中的90更改为180,会更加清晰,
#在改常量名后要去把第498行也改过来!
Tips
服务端升级bancho.py版本到v4.4.3时,mysql部分可直接选中favourites表来添加列,无需重新配置数据库


(此处参照https://github.com/osuAkatsuki/bancho.py/commit/ed16598a48135193476a539dafa7cf2601924cad)
Discussion
New Comments
No comments yet. Be the first one!