游戏服务器之消息校验是为了防止外挂添加的检查。
设计上:
消息校验分为
1、长度校验
消息需要过滤长度过长的消息
2、消息标识检查
消息需要过滤不符合标识的
3、校验码校验
消息需要过滤校验码不正确的
4、消息编号校验
检查编号正确的才可以转发到场景服务器,否则就踢出该玩家。编号是从0开始,到65535就重新从0开始
消息头的信息
struct base_msg
{
uint16 reserve;//保留字节(第15位是可用来标识是否压缩(0x4000))
uint16 len;//长度(从消息头标识开始计算)
uint16 base_flag;//消息头标识(某个固定的值)
uint16 base_sum;//交验码
uint16 base_index;//消息编号
uint8 first;//一级系统指令
uint8 second;//二级系统指令
...
};
1、消息头过滤
分析检验正确的才派送,然后发送到场景进程
1、长度校验
大于1.5K,小于消息头长度的包都直接忽略 (ptNull 是消息指针, msglen 消息长度)
if (!ptNull || msglen< (MSG_HEAD_SIZE) || msglen >= 1536)
{
error_log("外挂发来(帐号%s&#