使用Lua编写Wireshark解析器并将其设置在动态端口上
2011-5-15 5:35:38
收藏:0
阅读:194
评论:1
我有一个客户端服务器协议,它以以下方式工作。
客户端发送 UDP 广播以获取服务器的 ID(到固定端口)。
服务器接收数据报,并如果它与他的 ID 相匹配,则向客户端发送他正在侦听的端口。
然后,客户端打开到该端口的 TCP 连接。
我正在为此编写 Lua 中的 Wireshark 分析器,我需要动态设置 TCP 连接的端口(我不知道服务器侦听哪个端口)。
我尝试了这样的内容:
- 声明我们的协议
myproto_udp_proto = Proto("myproto_UDP", "myproto UDP Protocol")
myproto_tcp_proto = Proto("myproto_TCP", "myproto TCP Protocol")
- 创建一个函数来进行解析
function myproto_tcp_proto.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = "myproto TCP"
local subtree = tree:add(myproto_tcp_proto, buffer(), "myproto TCP Protocol Data")
if buffer(0, 2):uint() == 0xF00D then
subtree:add(buffer(0, 2), "Magic(F00D)")
else
subtree:add(buffer(0, 2), "Bad Magic")
end
end
function myproto_udp_proto.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = "myproto UDP"
local subtree = tree:add(myproto_udp_proto, buffer(), "myproto UDP Protocol Data")
if buffer(0, 2):uint() == 0xF00D then
subtree:add(buffer(0, 2), "Magic(F00D)")
local command;
local port = -1;
if buffer(2, 1):uint() == 01 then
command = "Searching for server"
elseif buffer(2, 1):uint() == 02 then
command = "I'm server"
port = buffer(7, 2):uint()
else
command = "unknown";
end
subtree:add(buffer(2, 1), command)
subtree:add(buffer(3, 4), "Server id: " .. buffer(3, 4):uint())
if port ~= -1 then
subtree:add(buffer(7, 2), "Server listening port: " .. buffer(7, 2):uint())
subtree:add(buffer(9, 4), "check bytes")
myproto_tcp_init(port)
end
else
subtree:add(buffer(0, 2), "Bad Magic")
end
end
- 加载udp.port表
udp_table = DissectorTable.get("udp.port")
- 注册我们的协议以处理udp端口1338
udp_table:add(1338, myproto_udp_proto)
function myproto_tcp_init(port)
- 加载tcp.port表
tcp_table = DissectorTable.get("tcp.port")
- 注册我们的协议以处理tcp端口! 动态!
tcp_table:add(port, myproto_tcp_proto)
end
我错过了什么?
提前致谢
原文链接 https://stackoverflow.com/questions/5992698
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
The mechanism presented here works. The problem was that the port number was taken from the wrong bytes (from buffer(4,2) instead of buffer(7,2)).
这里提出的机制是有效的。问题在于端口号是从错误的字节中获取的(从 buffer(4,2) 而不是 buffer(7,2))。