首页 > 其他分享 >课设报告

课设报告

时间:2023-12-16 21:55:26浏览次数:35  
标签:TLS 协议 课设 pkt 报告 buffer cols local

北京电子科技学院
《信息安全工程技术应用》课程设计报告
基于lua的wireshark插件开发

小组成员姓名:
20211410周意凯
20211417黄琪凯
20211421文鑫河

指导教师: 娄嘉鹏

提交时间:2023年12月10日

一、设计方案及可行性分析
该代码是一个用于解析 TLS(Transport Layer Security)协议的 Lua 插件,可以作为 Wireshark 的一个解析器。通过解析不同类型的 TLS 协议记录,包括 Change Cipher Spec 协议、Alert 协议、Handshake 协议和 Record 协议,为每个记录设置相应的协议类型。这个插件主要用于网络数据包的分析和监控,可以增加 Wireshark 对于 TLS 协议的解析能力。
二、详细设计思路
1.系统体系结构,技术选择;
该插件基于 Lua 语言编写,作为 Wireshark 的 Lua 插件,用于解析 TLS 协议记录。Wireshark 是一个广泛使用的网络协议分析工具,而Lua作为一种脚本语言,能够很好地扩展Wireshark的功能。基于Wireshark的插件机制,Lua语言被用来实现对TLS协议记录的解析。

2.说明程序中用到的关键数据类型的定义,绘制关键程序的流程图,以及各子模块间 的调用关系图;


MyProtocol
- dissectChangeCipherSpec()
- dissectAlert()
- dissectHandshake()
- dissectRecord()
- MyProtocol.dissector()

  1. 面向对象技术可以用UML建模

MyProtocol
+ dissectChangeCipherSpec(buffer, pkt)
+ dissectAlert(buffer, pkt)
+ dissectHandshake(buffer, pkt, tree)
+ dissectRecord(buffer, pkt)
+ MyProtocol.dissector(buffer, pkt, tree)

4.列出测试目的、测试内容、测试结果,并对结果进行分析
测试目的:验证插件对于不同类型的TLS协议记录的解析准确性。
测试内容:输入不同类型的TLS协议记录数据包,检查插件解析出的协议类型和信息是否准确。
测试结果分析:分析每种类型的TLS协议记录数据包解析的结果,确认是否满足预期,并进行结果分析。

三、设计特色
该插件通过解析不同类型的 TLS 协议记录,提供了对 Change Cipher Spec、Alert、Handshake 和 Record 协议的解析。主要设计特色包括提供准确的协议解析结果,能够帮助网络管理员或安全分析人员更好地理解和分析 TLS 协议相关的数据包。

四、源代码及注释

local my_protocol = Proto("MyProtocol", "My Protocol")

-- 子函数:处理TLS Change Cipher Spec Protocol
local function dissectChangeCipherSpec(buffer, pkt)
    pkt.cols.protocol:set("TLS-Change Cipher Spec")
end

-- 子函数:处理TLS Alert Protocol
local function dissectAlert(buffer, pkt)
    local level = buffer(5, 1):uint()
    local description = buffer(6, 1):uint()
    
    pkt.cols.protocol:set("TLS-Alert")
        
    if level == 0x01 then
        pkt.cols.info:set("Level: Warning")
        if description == 0x0A then
            pkt.cols.info:append(" - Description: Unexpected Message")
        end
    elseif level == 0x02 then
        pkt.cols.info:set("Level: Fatal")
        if description == 0x46 then
            pkt.cols.info:append(" - Description: Protocol Version")
        end
    else
        pkt.cols.info:set("Encrypted Alert")
    end
end


local function dissectHandshake(buffer, pkt, tree)
    local handshakeType = buffer(5, 1):uint()

    pkt.cols.protocol:set("hello20211417")
    if handshakeType == 0x01 then
        pkt.cols.info:set("Hello20211417")
    elseif handshakeType == 0x02 then
        pkt.cols.info:set("Hello20211417")
        local isCertificate = buffer(0x5c, 1):uint()
        if isCertificate == 0x0b then
            pkt.cols.info:append(" - Certificate")
        end

        -- 读取加密算法和临时密钥
        local cipherSuite = buffer(76, 2):uint()
        local keyExchange = buffer(15, 28):bytes()   -- 偏移调整
        local keyExchangeString = tostring(keyExchange)

        -- 打印加密算法和临时密钥到解析树中
        local treeItem = tree:add(my_protocol, buffer(), "Encryption Algorithm and Temporary Key")

        if cipherSuite == 0x003c then
            treeItem:add("RSA Authentication Algorithm:", "RSA Authentication Algorithm Used")
            treeItem:add("AES Encryption Algorithm:", "AES Encryption Algorithm Used")
            treeItem:add("SHA-256 Integrity Protection Algorithm:", "SHA-256 Integrity Protection Algorithm Used")
            treeItem:add("Key Exchange:", keyExchangeString)
        end
    elseif handshakeType == 0x10 then
        pkt.cols.info:set("Key Exchange")
        local isChangeCipherSpec = buffer(0x010b, 1):uint()
        if isChangeCipherSpec == 0x14 then
            pkt.cols.info:append(" - Change Cipher Spec")
        end
    end
end



-- 子函数:处理TLS Record Protocol
local function dissectRecord(buffer, pkt)
    pkt.cols.protocol:set("TLS-Record Data")
end

-- 主函数
function my_protocol.dissector(buffer, pkt, tree)
    local typer = buffer(0, 1):uint()

    if typer == 0x14 then
        dissectChangeCipherSpec(buffer, pkt)
    elseif typer == 0x15 then
        dissectAlert(buffer, pkt)
    elseif typer == 0x16 then
        dissectHandshake(buffer, pkt, tree)
    elseif typer == 0x17 then
        dissectRecord(buffer, pkt)
    end
end

-- 注册端口
local tcp_table = DissectorTable.get("tcp.port")
tcp_table:add(443, my_protocol)

五、个人报告
1.小组贡献排序及依据(每个人的工作量):

20211410周意凯:项目规划、主体代码编写

20211421文鑫河:代码完善、调试程序、收集实验成果

20211417黄琪凯:资料搜索整理、实验报告撰写、总结实验经验

2.个人报告(20211417黄琪凯):
a)列出自己的贡献
资料搜索整理
实验报告撰写
总结实验经验

b)列出设计中遇到的问题及解决方法
问题:对数据包解析不了解,不知道偏移多少位的某字节代表什么意思。
解决办法:上网查找资料,加上询问gpt学习。

c)列出调试过程中遇到的主要问题,并说明解决方法;
问题:编写的代码很多情况下加载都会报错

解决办法:询问GPT错误情况,但是GPT给的回复也没能解决问题,最后查找资料自己手动改代码解决。

d)设计体会及收获
在设计Lua插件的过程中,我了解到Wireshark的插件机制提供了很大的灵活性,能够为特定协议定制解析规则,使得我们可以更好地查看和理解特定数据包的内容。通过此次编写,我深入了解了SSL协议的结构和解析原理,以及Wireshark插件的编写方式。我学会了如何根据SSL协议的不同类型,解析出不同的子协议,并在Wireshark中展现出来。这需要对SSL协议的结构有一定的了解,也需要熟练掌握Lua编程语言。另外,我学到了如何注册特定的端口,使Wireshark能够识别SSL流量并应用相应的解析规则。我更加深入地理解了网络协议的解析原理和Wireshark插件的编写方式,也提升了对SSL协议的理解。
但是在设计的过程中,也遇到了很多问题,刚开始做的题目五,在“D1-应用服务器和用户终端之间的通信数据”中找到证书,但是在数据包里没看到SSL协议的数据包,后面转变了设计思路,转变为设计SSL握手协议、密码规格变更协议、报警协议、记录层协议这几个协议。

e)参考资料(图书、网址…)

https://blog.csdn.net/qq_38643642/article/details/105441044?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170273182616800182783880%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170273182616800182783880&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-105441044-null-null.142^v96^pc_search_result_base2&utm_term=lua%20wireshark&spm=1018.2226.3001.4187

https://blog.csdn.net/Little_Eyelash/article/details/115242195?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170273182616800182783880%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170273182616800182783880&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-4-115242195-null-null.142^v96^pc_search_result_base2&utm_term=lua%20wireshark&spm=1018.2226.3001.4187

https://blog.csdn.net/quniyade0/article/details/115266774?ops_request_misc=&request_id=&biz_id=102&utm_term=lua%20wireshark&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-7-115266774.142^v96^pc_search_result_base2&spm=1018.2226.3001.4187

标签:TLS,协议,课设,pkt,报告,buffer,cols,local
From: https://www.cnblogs.com/wjdnmx/p/17908439.html

相关文章

  • IS课程设计-个人报告
    个人报告1.小组贡献排序及依据(每个人的工作量):张顺扬(37%):针对GMT0024以及相关网站提供的五个协议相关数据资料编写lua代码并进行不断调试。肖权城(33%):前期进行相关资料检索,提供了大量包括协议逻辑分析功能的网站和数据资料对后期代码编写带来了有力支撑。徐元琦(30%):对代码进行修......
  • 课程设计个人报告
    基于Wireshark插件的国密标准检测工具的设计与实现个人贡献:程序框架设计及主要代码编写设计中遇到的问题及解决方法:协议字段提取问题:问题描述:在解析记录层时,出现协议字段提取错误的问题,导致无法准确识别TLS记录的内容类型。解决方法:使用正确的偏移量和长度来提取协议字段......
  • gamble 题解报告
    #Galble题解简要题意:  给定一个数$n$AB两人赌博,每次你作为第三者下注任意整数$x$元,A赢则获得$x$元,否则亏损$x$元。任何一个人赢$n$次立刻结束游戏。你需要每次基于现在的情况,计算下的赌注,以使得在整个赌博的全过程,如果A胜利则获得$2^{2n-1}$元,否则亏损这么......
  • jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱
    前言个人其实一直的不太喜欢用邮箱发送报告,测试报告用邮件通知这都是五六年前的事情了,但有部分小伙伴依然执着于发邮件报告通知。这里整理了下发邮箱通知的教程。配置你的邮箱配置邮箱这一步最繁琐,由于每个人使用的邮箱不一样,配置也是不一样的,没有固定的答案。这就导致很多人......
  • 【专题】2022年中国跨境电商行业研究报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32044近年来,我国的跨境电子商务发展迅速,在过去五年中,其贸易额增长率达到了16.2%,已经成为稳定对外贸易的一支重要力量。阅读原文,获取专题报告合集全文,解锁文末52份跨境电商行业相关报告。一方面,随着跨境电子商务的发展,跨境电子商务的监管政策得到了......
  • 事后诸葛亮分析报告
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade21-12这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13022这个作业的目标事后诸葛亮分析报告设想和目标1.我们的软件要解决什么问题?是否定义得很清楚?是否对......
  • 【专题】2023中国新母婴人群研究报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34538原文出处:拓端数据部落公众号在回归母婴行业主题的背景下,我们发现了一个普遍讨论的热点问题——生育率的下降。随着主要母婴群体和市场环境的变化,母婴行业已经进入存量竞争阶段。为了应对这一挑战,母婴品牌和服务机构需要调整经营思路,以赢得消......
  • 2023.12.12 校赛解题报告
    7-1点菜题面Congruent和ComistryMo两个人正在饭店吃饭,饭店里面一共有\(n\)道菜,每道菜有一个价格\(a_i\)​\((1≤i≤n)\)。他俩会在饭店按顺序点\(k\)道菜(可以不连续,保证相对顺序即可),假设点的菜序列为\(S_1−S_k\)。他们约定:一个人付所有奇数下标已点菜品价格的最大......
  • 行业报告 | 中国工业机器人的“春天”
    原创|文BFT机器人前言:工业机器人是先进制造业中不可替代的重要装备,是衡量国家制造业水平和科技水平的重要标志。中国作为世界公认的制造业第一大国,随着人口红利的逐渐消退,劳动力成本不断提高,生产自动化和发展高科技是促进中国产业结构调整的必要手段。近年来,中国工业机器人的技......
  • 空闲页面报告 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/mm/free_page_reporting.html空闲页面报告空闲页面报告是一种API,设备可以通过该API注册以接收当前系统未使用的页面列表。这在虚拟化的情况下非常有用,因为虚拟机可以利用这些数据通知hypervisor它不再使用内存中的某些页面。对于驱动程......