个人报告(20211315邹雪梅):
a)列出自己的贡献
- 代码运行报错修改,越界检查等辅助部分的编写,插件运行测试,参与插件设计,小组报告中负责:二、3列出测试目的、测试内容、测试结果,并对结果进行分析,三、设计特色部分的撰写。
b)列出设计中遇到的问题及解决方法
- 问题1:协议字段解析错误
解决方法:
正确理解SSL协议,通过查阅资料和抓包实践分析了解每个字段的位置和含义。然后,检查代码,确保要从数据包中提取字段的值的与代码中对应。注:过程中可以使用Wireshark的内置协议解析器作为参考。 - 问题2:插件无法正确关联到端口
解决方法:
检查DissectorTable.get和tcp_table:add调用是否正确。确保使用的端口号是正确的,有我们要解析的协议的数据包。 - 问题3:插件对特定协议版本的支持不完全
解决方法:
在设计插件时,需要确保对协议的各个版本都有充分的理解和支持。如果发现对某个版本的支持不完全,需要查阅相关的协议文档,理解版本之间的差异,并在代码中添加对新版本的处理逻辑。(目前没有发现统一的解决方法,只能在遇到不支持的协议时添加新的符合新协议的代码) - 问题4:插件在处理特殊情况时出错
解决方法:
在某些包中可能出现解析出来的protocol名不是协议名而是一个字段值,这主要需要在设计插件时,需要考虑到协议的各种特殊情况,例如数据包的字段可能为空,或者数据包的长度可能超出预期等。对于这些特殊情况,需要在代码中添加相应的错误处理逻辑。以及在发现问题时新增解决对应问题的代码。 - 问题5:插件的兼容性问题
解决方法:我们组就出现了在其他两位成员电脑上能正确运行的代码到我这里报错的现象,尝试了两种解决方法,一开始是添加新的代码,使他兼容我的版本,另一种是将自己的wireshark换成和他们一样的版本。通过查阅资料我们了解搭配如果插件在某些版本的Wireshark上无法正常工作,可能是因为使用了一些不兼容的API。对于这种问题,需要查阅Wireshark的API文档,了解API的兼容性信息,并在代码中添加对不同版本Wireshark的兼容性处理。
c)列出调试过程中遇到的主要问题,并说明解决方法;
- 问题1:在按照示例插件制作博客测试示例代码时出现报错(插件无法加载)
解决方法:
去查找了另外的相关博客,将插件代码转移到plugins文件夹而不是直接放在wireshark根目录,也不需要修改根目录相关文件代码,在wireshark页面选择“分析”、“重新载入插件”即可正常运行。 - 问题2:代码报错range is our of bounds
解决方法:
在提取client_hello和content_type字段之前增加对tvb长度的检查,防止越界访问。
在提取cipher_suite1、cipher_suite2和cipher_suite3字段之前增加对tvb长度的检查,防止越界访问。 - 问题3:示例博客使用的xcap发送的包不能被wireshark抓取到
解决方法:
因为电脑之前创建过许多虚拟机,所以要找准正确的发包设备,在wireshark中合理使用筛选功能 - 问题4:命令行中可以执行单条lua代码但是不能运行lua文件
解决方法:
首先要正确配置环境(尤其是Windows,Linux下直接下载一般就可以用)然后注意不要进入lua文件夹,直接运行相关命令即可。 - 问题5:Lua语法错误
解决方法:
使用Lua语法检查工具,如luacheck,检查代码中的语法错误,并根据工具的反馈修正错误。
d)设计体会及收获
- 1. 理解协议的重要性:在设计Wireshark插件时,对协议的理解是非常重要的。只有深入理解协议的结构和含义,才能编写出正确的解析代码。这需要阅读大量的协议文档,甚至需要阅读协议的源代码。
- 2. 代码的可读性和可维护性:在编写代码时,需要注意代码的可读性和可维护性。这包括使用清晰的变量名,添加必要的注释,以及保持代码的结构清晰。这样不仅可以提高自己的开发效率,也可以方便其他人阅读和修改代码。我们组的代码属于可维护性较强的代码,这也使得我们在编写过程中增加新的协议变得很简单
- 3. 错误处理的重要性:在处理网络数据包时,需要考虑到各种可能的错误情况,例如数据包的字段可能为空,或者数据包的长度可能超出预期等。对于这些错误情况,需要在代码中添加相应的错误处理逻辑。我们组出现了两次越界报错,最后通过添加代码得以使插件正常运行,这也提醒我们在编写插件时要注意错误处理
- 4. 测试的重要性:在开发完插件后,需要进行充分的测试,确保插件的功能是正确的。这包括对插件的基本功能进行测试,也包括对插件的异常处理能力进行测试。只有经过充分的测试,才能确保插件在实际使用中的稳定性。我们组测试插件时发现在不同版本的wireshark,不同的数据包时,可能出现插件运行结果错误,所以多测试才能不断完善我们的插件。
- 5. 持续学习和改进:在开发过程中,可能会遇到各种未知的问题。这需要我们有持续学习和改进的精神,不断查阅相关的文档和资料,不断尝试新的解决方案,不断优化和改进我们的代码。此次课程设计过程中我们不仅学习了老师给的参考资料,还到微信读书,知乎,CSDN有找了其他博客和书籍进行学习,遇到问题也及时积极查找解决方法,过程中也发现了和lua语言相关的一些好用的软件,比如如果插件处理数据包的速度太慢,需要优化代码。可以使用Lua的性能分析工具,如luaprofiler,找出性能瓶颈,并优化相关的代码。
e)参考资料
《自己动手实现lua:虚拟机、编译器和标准库》
《Wireshark网络分析从入门到实践》
于Lua语言的wireshark插件编写
Wireshark中lua脚本介绍
Wireshark插件开发
自己动手编写Wireshark Lua插件解析自定义协议
国密标准