个人报告
1.小组贡献排序及依据(每个人的工作量):
- 张顺扬(37%):针对GMT0024以及相关网站提供的五个协议相关数据资料编写lua代码并进行不断调试。
- 肖权城(33%):前期进行相关资料检索,提供了大量包括协议逻辑分析功能的网站和数据资料对后期代码编写带来了有力支撑。
- 徐元琦(30%):对代码进行修改,分析Wireshark数据包内容
2.个人报告(20211406张顺扬):
在这个课程设计中,我贡献了以下方面的工作:
1. 设计和实现SSL/TLS协议解析功能
编写了主要的解析函数,包括握手协议解析(dissect_ssl_handshake
)、CipherSpec Change协议解析(dissect_cipher_spec_change
)、Record Layer协议解析(dissect_record_layer_protocol
)、Alert Protocol协议解析(dissect_alert_protocol
)等。这些函数通过解析Wireshark捕获的SSL/TLS流量,提取关键信息,并在Wireshark界面中以易读的方式显示。
2. 设计清晰的模块化结构
将解析功能模块化设计,每个模块负责特定协议的解析。这种设计风格提高了代码的可维护性和可扩展性,使得其他开发者可以更容易理解和扩展代码。
** 3. 添加对国密标准的支持**
根据国密标准,修改了握手协议解析函数,确保它可以正确解析使用国密算法的SSL/TLS握手协议。这样的修改对于满足特定加密算法需求的网络流量分析具有重要意义。
4. 注释和文档编写
在代码中添加了详尽的注释,解释了关键逻辑和功能。这有助于其他开发者理解代码,并能够更方便地进行二次开发或维护。同时,我对整个课程设计进行了详细的流程分析,编写了设计文档,包括系统体系结构、数据类型定义、程序流程图、UML类图和时序图等。
5. 测试和调试
通过对Wireshark捕获的SSL/TLS流量进行测试,验证了插件在实际场景中的正确性。在调试过程中,我发现并解决了一些潜在的问题,确保了插件的稳定性和可靠性。
** 6. 注册协议和端口**
设计了ssl_tls_protocol_init
函数,用于注册SSL/TLS协议并指定对应的端口。这一步确保了Wireshark能够识别并解析指定端口上的SSL/TLS流量。
总体而言,该课程设计能够更好地解析SSL/TLS协议,支持国密标准,并提供了清晰的代码结构和文档,为其他开发者提供了参考和便利。
-
a)列出设计中遇到的问题及解决方法
设计过程中,主要遇到了代码逻辑难于实现,比如网关到网关协议的实现和握手协议的具体代码分析。
但在相关资料分析后,也得知了协议数据逻辑和代码之间的关系。
-
b)列出调试过程中遇到的主要问题,并说明解决方法;
我们小组每个人的Wireshark版本不一样,可能会导致出现的数据包分析结果不一致,根据不同的版本,代码也会随之更改。
在调试过程中,我们小组出现了如下主要问题
- 解析逻辑错误:
问题: 解析SSL/TLS握手协议或其他协议时,逻辑错误导致解析结果不准确。
解决方法: 通过仔细检查解析函数中的逻辑,查看Wireshark捕获的数据包和协议规范,确认解析逻辑是否正确。可以使用打印语句或调试工具来辅助调试,逐步排查问题。
- 数据偏移错误:
问题: 由于数据包的结构变化或解析位置偏移错误,导致解析的字段内容错误。
解决方法: 仔细检查解析函数中的数据包偏移量,确保读取的字段位置正确。使用Wireshark的数据包详细信息来验证偏移量是否正确,并修复偏移错误的部分。
- 国密标准支持问题:
问题: 在解析国密标准的SSL/TLS握手协议时,可能出现解析错误或不支持的算法。
解决方法: 深入研究国密标准文档,了解相关算法的数据结构和解析规则。对解析函数进行修改,确保支持国密标准的加密算法。可以参考相关文档或规范,也可以查阅开源实现的代码作为参考。
- Wireshark插件注册问题:
问题: 插件未成功注册到Wireshark,导致无法解析指定端口上的SSL/TLS流量。
解决方法: 确认注册函数 ssl_tls_protocol_init 中的协议名和端口号是否正确,检查Wireshark插件的加载路径是否正确。可以通过Wireshark的插件管理界面或控制台输出来验证插件是否成功加载。
- 性能问题:
问题: 在解析大量数据包时,可能出现性能瓶颈,影响Wireshark的响应速度。
解决方法: 优化解析函数,避免不必要的循环或重复操作。可以考虑添加缓存机制,减少对相同数据的重复解析。使用Wireshark提供的性能分析工具,定位性能瓶颈,并对其进行优化。
我们小组通过不断修改和调试,有效地应对在调试过程中可能遇到的问题,确保插件的正确性和稳定性。在调试过程中,及时查找并解决问题有助于提高代码质量和插件的可用性。
- c)设计体会及收获
在参与这个课程设计的过程中,我积累了丰富的设计体会和收获,涉及到技术层面、团队协作以及实际问题解决等多个方面。
技术层面:
-
插件化开发的优势: 通过Wireshark插件化开发,我深刻体会到了插件化架构的优势。这种设计风格使得系统更容易扩展,代码模块化程度高,不同功能模块互相独立,方便维护和修改。
-
Wireshark API的灵活应用: 学习和使用Wireshark API时,我发现其提供了丰富的功能和接口,能够充分发挥Wireshark的网络分析能力。合理利用这些API,能够更轻松地完成对协议的解析和展示。
-
国密标准的理解和应用: 在适应国密标准时,我深入研究了相关文档和规范,了解了国密算法的原理和应用。这拓宽了我的密码学知识,并使我能够更好地应对网络安全领域的具体要求。
团队协作:
-
注重文档和注释: 在团队协作中,编写清晰、详细的文档和注释显得尤为重要。通过我的努力,整个课程设计具备了良好的可读性和可维护性,团队成员能够更容易理解我的代码和设计思路。
-
协同调试和讨论: 在遇到问题时,采用协同调试和团队讨论的方式,能够更快速地找到解决方案。通过共享调试经验和问题分析,团队成员的智慧得以集结,帮助项目更顺利地推进。
实际问题解决:
-
解析逻辑的准确性: 在解析协议过程中,需要不断验证解析逻辑的准确性,通过与协议规范对比,确保解析结果的正确性。这培养了我的耐心和细致入微的思考能力。
-
对性能的关注: 面对大量数据包的解析,需要关注性能问题,对代码进行优化。这锻炼了我的性能优化能力,使我更关注代码的效率和可扩展性。
总结与展望:
通过这个课程设计,我对于wireshark插件编写理解更加深入,虽然在lua语言上理解更加透彻,但在c语言插件编写方面我还应该多下功夫,同时,小组团队协作和问题解决的能力也是极其重要的。这次设计使我更深刻地理解了网络协议解析的复杂性和重要性,也为我未来在网络安全领域的发展奠定了坚实的基础。
在将来的课设或实习中,我应该更加投入到团队建设和前期的分工当中,为后来的代码编写阶段节约更多时间,并且留出试错的空间。同时,我将更专注于提升C语言插件编写的技能,以拓宽自己在Wireshark插件开发方面的能力。加强团队建设和前期分工,为后续的代码编写提供更有力的支持,优化团队协作效率。同时,我会保持对网络协议解析复杂性的敏感性,注重问题的深入分析与解决,以不断提升自己在网络安全领域的专业素养,为未来的职业发展打下更加坚实的基础。
-
d) 参考资料