Wireshark 解析器工作原理与 TLS/SSL
我有一个使用非标准端口和传输非标准数据(不是 http)的 SSL/TLS 协议。我正在尝试使用 lua 制作一个 Wireshark 解析器来解析这个协议。
我该如何做?我可以注册一个针对该端口的 tcp 片段进行调用的解析器
local dissector_table_tcp = DissectorTable.get("tcp.port")
dissector_table_tcp:add(1234, myprotocol)
接着我可以让 SSL 解析器将所有片段解码为 SSL
function myprotocol.dissector(tvb, pinfo, root)
local ssl_dissector = Dissector.get("ssl")
local ssl_dissected_len = ssl_dissector:call(tvb, pinfo, root)
pinfo.cols.protocol:set("My Protocol")
在这一点上,如果我在 Wireshark 中设置了一个 premaster key 文件(首选项->协议->SSL->主密钥文件),我就可以看到数据包的解密内容,并且一切顺利。有点顺利。
但是我希望为我的协议创建字段,并将它们放入协议树中。我该如何获取 SSL 解析器生成的已解密数据?
更新:
我正在尽力尝试搞清楚这件事,没有确切的教程告诉你应该如何做。
从某种程度上看,Wireshark 有一个基于字段/变量且由解析器填充的编程模型,理论上应该可以查询这些变量以查找解析器的输出。
为此,我一直在运行 SSL 解析器,然后查看它声明的字段,但它似乎没有填充它们。当我在 SSL 解析器之后运行 post-dissector 时,似乎没有任何有用的字段被设置,例如 ssl.segments 或 ssl.segment.data:
protocol_foo = Proto("foo", "Foo protocol")
port = 4172
g_field_segment = Field.new("ssl.segment")
g_field_segment_data = Field.new("ssl.segment.data")
g_field_segments = Field.new("ssl.segments")
g_field_reassembled_data = Field.new("ssl.reassembled.data")
function protocol_foo.dissector(tvb, pinfo, root)
print("====== protocol_foo")
for k,v in pairs({ g_field_segment, g_field_segment_data, g_field_segments, g_field_reassembled_data }) do
if v() ~= nil then
print("Field " .. v.name .. " is NOT nil")
else
print("Field " .. v.name .. " is nil")
end
end
end
-- post-dissector registration
local ssl_dissector = Dissector.get("ssl")
local dissector_table_tcp = DissectorTable.get("tcp.port")
dissector_table_tcp:add(port, ssl_dissector)
register_postdissector(protocol_foo)
当我在我的协议上运行这段代码时,这些 ssl.segment* 变量中没有一个测试为真;许多变量(如 ssl.handshake.*)变量确实测试为真(至少在握手协议数据单元中是这样),但没有解密内容的变量测试为真。
大家有什么想法吗?
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
