admin管理员组文章数量:1029925
网络流量处理中的协议解析:解析
能从链接中拿到一行一行的数据,就可以开始解析SMTP了。
解析过程
解析过程就是循环读取一行数据,然后按照协议顺序逐行解析。伪代码如下:
代码语言:c代码运行次数:0运行复制while (get_line() != 0) {
if (state == ERROR) return;
if (state == HEAD) {
// 处理head的过程
state = BODY;
continue;
}
if (state == BODY) {
// 处理body的过程
state = END;
continue;
}
// 其他部分处理
if (state == END) {
// 结束退出处理过程
}
}
其中的state用例记录解析的状态,但邮件头还未处理完的时候state始终保持为HEAD。这样下次包到来的时候进入解析函数后会继续解析邮件头。其他阶段的状态类似。当处理完头部的时候把state改为头部的后续阶段BODY,就进入邮件正文的解析。
解析的问题
这部分伪代码看起来还算清晰。但是真正实现的时候会遇到很多麻烦。比如,判断一个状态的结束和开始,比如需要重复进入同样的状态。还有代码的结构看起来也很混乱。在复杂混乱的实际代码中可能体现得不够清晰,但是这个经过精简的伪代码循环却给出一个提示:
解析的过程其实就是状态转换的过程。状态转换过程将在下一篇文章:网络流量处理中的协议解析:状态机 中详细描述。
参考: protolens@gitee protolens@github
网络流量处理中的协议解析:解析
能从链接中拿到一行一行的数据,就可以开始解析SMTP了。
解析过程
解析过程就是循环读取一行数据,然后按照协议顺序逐行解析。伪代码如下:
代码语言:c代码运行次数:0运行复制while (get_line() != 0) {
if (state == ERROR) return;
if (state == HEAD) {
// 处理head的过程
state = BODY;
continue;
}
if (state == BODY) {
// 处理body的过程
state = END;
continue;
}
// 其他部分处理
if (state == END) {
// 结束退出处理过程
}
}
其中的state用例记录解析的状态,但邮件头还未处理完的时候state始终保持为HEAD。这样下次包到来的时候进入解析函数后会继续解析邮件头。其他阶段的状态类似。当处理完头部的时候把state改为头部的后续阶段BODY,就进入邮件正文的解析。
解析的问题
这部分伪代码看起来还算清晰。但是真正实现的时候会遇到很多麻烦。比如,判断一个状态的结束和开始,比如需要重复进入同样的状态。还有代码的结构看起来也很混乱。在复杂混乱的实际代码中可能体现得不够清晰,但是这个经过精简的伪代码循环却给出一个提示:
解析的过程其实就是状态转换的过程。状态转换过程将在下一篇文章:网络流量处理中的协议解析:状态机 中详细描述。
参考: protolens@gitee protolens@github
本文标签: 网络流量处理中的协议解析解析
版权声明:本文标题:网络流量处理中的协议解析:解析 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747626485a2195284.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论