密文格式:TIMESTAMP ID VER CMD DATALEN data CRC32
密文内容:00000021 4354 03e9 000003ea 00000005 1e5a4 e9297e55比如读入时间戳内容00000021,发现验证未通过,那么,该密文是无效的,需要把后续读进来的“4354 03e9 000003ea 00000005 1e5a4 e9297e55” 这些内容过滤掉,否则的话,会误把接下去的流当作下一次的密文,也就是会误理解成这种格式:密文内容:435403e9 0000 03ea 00000005 1e5a4e92 97e55......
大家应该已经看到了,上面的红色字体和下面的红色字体内容是一样的,形成这个bug的原因是未有把后续的部分字节给过滤掉,
所以我们的问题是如何过滤掉未通过验证的密文的后续字节,而后续字节的长度又是不确定的,因为的data未知。
不知哪位高手有方法?高分期待中...
密文内容:00000021 4354 03e9 000003ea 00000005 1e5a4 e9297e55比如读入时间戳内容00000021,发现验证未通过,那么,该密文是无效的,需要把后续读进来的“4354 03e9 000003ea 00000005 1e5a4 e9297e55” 这些内容过滤掉,否则的话,会误把接下去的流当作下一次的密文,也就是会误理解成这种格式:密文内容:435403e9 0000 03ea 00000005 1e5a4e92 97e55......
大家应该已经看到了,上面的红色字体和下面的红色字体内容是一样的,形成这个bug的原因是未有把后续的部分字节给过滤掉,
所以我们的问题是如何过滤掉未通过验证的密文的后续字节,而后续字节的长度又是不确定的,因为的data未知。
不知哪位高手有方法?高分期待中...
楼主【jiangguilong2000】截止到2008-07-27 03:25:58的历史汇总数据(不包括此帖):
发帖的总数量:15 发帖的总分数:630 每贴平均分数:42
回帖的总数量:15 得分贴总数量:1 回帖的得分率:6%
结贴的总数量:9 结贴的总分数:310
无满意结贴数:2 无满意结贴分:40
未结的帖子数:6 未结的总分数:320
结贴的百分比:60.00 % 结分的百分比:49.21 %
无满意结贴率:22.22 % 无满意结分率:12.90 %
楼主加油
你应该在协议的顶端加入一个长度标识
密文内容:00000021 4354 03e9 000003ea 00000005 1e5a4 e9297e55 在数据首加入4个字节的标识,用来表示数据的长度,根据这个长度来收你的密文
密文内容:[00][00][00][ff] 00000021 4354 03e9 000003ea 00000005 1e5a4 e9297e55
TIMESTAMP ID VER CMD DATALEN 这五个字段,应该是定长的,你现在,先处理TIMESTAMP字段,如果不合法,就读取ID VER CMD DATALEN这
四个字段,但是ID VER CMD 这三个字段不做处理,根据DATALEN的信息读取data CRC32 两个字段的信息,但是也不做处理。然后是读取下一个报文。
如果TIMESTAMP合法,也会读取每个字段,但是,每个字段都做处理。我的解释,应该够详细了把。
至于不按协议的非法包,怎样判断,一般是通过TIMESTAMP ID VER这三个字段来觉得的,如果TIMESTAMP ID VER这三个字段联合起来不合法,就会断掉
Socket连接,而其中某个字段不合法的情况下,可以断开连接,也可以想我上面说的那样来处理。
Socket连接,而其中某个字段不合法的情况下,可以断开连接,也可以想我上面说的那样来处理。 ”
“断掉Socket连接”与“断开连接”应该一样的意思吧?还有我觉得你说的可以根据上面你说的“先把整个报文都读进来,然后在进行判断。不合法的报文不做处理就可以”,我觉得不是很合理,为什么?如果在DATALEN这个字段非法包正好显示后面的DATA数据为1G长度呢?那岂不是要让客户端狂读狂读再狂读?