当前位置: 首页 > news >正文

wireshark自定义协议插件开发

目录

脚本代码

报文显示


脚本代码

local NAME = "test"
test_proto = Proto("test", "test Protocol")


task_id = ProtoField.uint16("test.task_id", "test id", base.DEC)
cn = ProtoField.uint8("test.cn", "XXX", base.DEC)
sn = ProtoField.uint32("test.sn", "xxx", base.DEC)
indicator = ProtoField.uint32("test.indicator", "Indicator", base.DEC)
flag = ProtoField.uint8(NAME.."flag", "Flag", base.HEX)

local bit8 = {[0] = "XXX", [1] = "XXX"}
local bit7 = {[0] = "XXX", [1] = "XXX"}
local bit6 = {[0] = "XXX", [1] = "XXX"}
local bit5 = {[0] = "XXX", [1] = "XXX"}
local bit4 = {[0] = "XXX", [1] = "XXX"}
local bit3 = {[0] = "XXX", [1] = "XXX"}
local bit2 = {[0] = "Reserve", [1] = "Reserve"}
local bit1 = {[0] = "Reserve", [1] = "Reserve"}
msg_bit8 = ProtoField.uint8("msg_bit8", "bit8", base.DEC, bit8, 0x80)
msg_bit7 = ProtoField.uint8("msg_bit7", "bit7", base.DEC, bit7, 0x40)
msg_bit6 = ProtoField.uint8("msg_bit6", "bit6", base.DEC, bit6, 0x20)
msg_bit5 = ProtoField.uint8("msg_bit5", "bit5", base.DEC, bit5, 0x10)
msg_bit4 = ProtoField.uint8("msg_bit4", "bit4", base.DEC, bit4, 0x08)
msg_bit3 = ProtoField.uint8("msg_bit3", "bit3", base.DEC, bit3, 0x04)
msg_bit2 = ProtoField.uint8("msg_bit2", "bit2", base.DEC, bit2, 0x02)
msg_bit1 = ProtoField.uint8("msg_bit1", "bit1", base.DEC, bit1, 0x01)

test_proto.fields = {
    task_id,
    sn,
    indicator,
    flag,
    cn,
    msg_bit8,
    msg_bit7,
    msg_bit6,
    msg_bit5,
    msg_bit4,
    msg_bit3,
    msg_bit2,
    msg_bit1
}

function And(num1,num2)
    local tmp1 = num1
    local tmp2 = num2
    local str = ""
    repeat
        local s1 = tmp1 % 2
        local s2 = tmp2 % 2
        if s1 == s2 then
            if s1 == 1 then
                str = "1"..str
            else
                str = "0"..str
            end
        else
            str = "0"..str
        end
        tmp1 = math.modf(tmp1/2)
        tmp2 = math.modf(tmp2/2)
    until(tmp1 == 0 and tmp2 == 0)
    return tonumber(str,2)
end

-- buffer:包的数据
-- pinfo: 显示的信息
-- tree:包结构的关系
function test_proto.dissector(buffer, pinfo, tree)
    local buflen = buffer:len();
    if buflen == 0 then return end
    
    --显示在protocol列的名字
    pinfo.cols.protocol = test_proto.name 
    
    --显示在数据查看
    local test = tree:add(test_proto, buffer(), "test") 
    header_len = 8
    local test_header = test:add(test_proto, buffer(0, header_len), "test header") 
    local offset = 0;
    test_header:add(task_id, buffer(offset,2))
    offset = offset + 2;
    
    -- cn 字段解析
    test_header:add(cn, buffer(offset,1))
    offset = offset + 1;
    -- 根据flag字段,判断显示info信息 todo
    local flag_node = test_header:add(flag, buffer(offset,1))
    flag_node:add(msg_bit8, buffer(offset,1))
    flag_node:add(msg_bit7, buffer(offset,1))
    flag_node:add(msg_bit6, buffer(offset,1))
    flag_node:add(msg_bit5, buffer(offset,1))
    flag_node:add(msg_bit4, buffer(offset,1))
    flag_node:add(msg_bit3, buffer(offset,1))
    flag_node:add(msg_bit2, buffer(offset,1))
    flag_node:add(msg_bit1, buffer(offset,1))
    local ack = buffer(offset,1):uint() 
    ack_bit = And(ack, 0x80)
    offset = offset + 1;
    
    -- sn 字段解析
    test_header:add(sn, buffer(offset,4))
    sn_value = buffer(offset,4):uint()
    offset = offset + 4;
    if ack_bit == 0x80 then
        info = string.format("rx -> tx Ack Sn=%d Len=%d", sn_value, buflen)
        pinfo.cols.info = info 
    else 
        info = string.format("tx -> rx Sn=%d Len=%d", sn_value, buflen)
        pinfo.cols.info = info 
    end    
    
    local payload_len = buflen - offset;
    local test_header = test:add(test_proto, buffer(offset, payload_len), "test payload") 
    
end


local ip_protocol = DissectorTable.get("ip.proto")
ip_protocol:add(0xff, test_proto) --抓到的0xffff端口的数据,按test_proto的规则来解析
 

报文显示

相关文章:

wireshark自定义协议插件开发

目录 脚本代码 报文显示 脚本代码 local NAME "test" test_proto Proto("test", "test Protocol") task_id ProtoField.uint16("test.task_id", "test id", base.DEC) cn ProtoField.uint8("test.cn", &qu…...

一文读懂MongoDB的全部知识点(1),惊呆面试官。

文章目录 01、mongodb是什么?02、mongodb有哪些特点?03、你说的NoSQL数据库是什么意思?NoSQL与RDBMS直接有什么区别?为什么要使用和不使用NoSQL数据库?说一说NoSQL数据库的几个优点?04、NoSQL数据库有哪些类型?05、M…...

仅仅通过提示词,GPT-4可以被引导成为多个领域的特定专家

The Power of Prompting:提示的力量,仅通过提示,GPT-4可以被引导成为多个领域的特定专家。微软研究院发布了一项研究,展示了在仅使用提策略的情况下让GPT 4在医学基准测试中表现得像一个专家。研究显示,GPT-4在相同的基…...

23.Oracle11g的UNDO表空间

Oracle的UNDO表空间 一、UNDO表空间概述1、什么是UNDO表空间2、UNDO表空间的作用2.1 提供一致性读2.2 回滚事务2.3 实例恢复 3、UNDO表空间的工作机制 二、UNDO表空间的相关操作1、UNDO表空间的创建2、UNDO表空间的管理 三、Oracle 11g中UNDO表空间的新特性1、UNDO表空间自动管…...

Mybatis 操作续集2(结合上文)

Mybatis 是一个持久层框架,用于简化数据库的操作,和Spring 没有任何关系,我们现在能使用它是因为 Spring Boot 把Mybatis 的依赖给引入进来了,在 pom.xml 里面 Mybatis 如何进行重命名? 看最后两行代码,这样就能重命名了 package com.example.mybatisdemo.mapper;import com…...

LangChain 19 Agents Reason+Action自定义agent处理OpenAI的计算缺陷

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…...

12.整数转罗马数字

C不能像Python那样使用c*num的形式,重复字符,老老实实减吧。 class Solution { public:string intToRoman(int num) {string ans "";int res num;while (res ! 0) {if (res > 1000) {ans M;res - 1000;} else if (res > 900) {ans …...

免费AI洗稿软件【2023最新】

很多时候我们需要通过文字来表达观点、推广产品或服务。然而,长时间的文稿创作不仅费时费力,还容易陷入表达瓶颈。许多写手和从业者纷纷寻找一款方便、高效的AI洗稿工具。 文心一言洗稿软件。这款软件以其独特的文风生成和洗稿功能而备受瞩目。用户只需…...

PTA:平方回文数

题干 在数学里面,有一种数字正着读和反着读结果都一样,我们把这种数称为回文数。如果一个回文数,它同时还是某一个数的平方,这样的数字叫做平方回数。 本题要求输出小于正整数N的所有平方回数。 (注:个位数…...

从“AI证件照”到“AI译制片”,爆款AIGC应用的商业化迷思

让郭德纲飙英文、让霉霉说中文的翻译视频生成工具HeyGen和掀起AI证件照热潮的“妙鸭相机”一样,在一阵疯狂刷屏之后,又迅速在各大群里销声匿迹了。 十月份,由HeyGen制作的各种明星跨语言翻译视频,在全网疯传,大家震撼于…...

JAVA代码优化:Easy Excel(操作Excel文件的开源工具)

Easy Excel官网: EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel (alibaba.com) https://easyexcel.opensource.alibaba.com/ Easy Excel的特点和优势: 简单易用:Easy Excel提供了简洁的API,使用起来非常方便。开发…...

Linux Python ping3库使用教程(ping3命令、ping命令)

文章目录 Linux Python ping3库使用教程1. 环境准备2. ping3库安装3. ping3基本使用4. ping3进阶使用5. 常见问题解答5.1 ping3库可以在Windows系统中使用吗?5.2 如何处理ping操作超时的情况?5.3 ping3库支持IPv6吗? Linux Python ping3库使用…...

分享一些基于php商城案例

案例1: ​​​​​​http://www.9520.xin/ 案例2: http://ptll.hasbuy.com/ 案例3: http://likeshop.9520.xin/mobile 案例4: http://www.hasbuy.com/...

SpringSecurity 三更草堂 学习笔记

SpringSecurity从入门到精通 0. 简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的…...

基于Java SSM仓库管理系统

企业仓库有多个库房,用来分别存放生产需要的各种零件,仓库管理系统对此进行科学的管理。仓库管理系统管理的对象及操作如下: 管理员信息:工号、姓名、性别、年龄、电话、工资等。 库房信息:编号、地址、面积等。 零件信…...

基于Spark对消费者行为数据进行数据分析开发案例

原创/朱季谦 本文适合入门Spark RDD的计算处理。 在日常工作当中,经常遇到基于Spark去读取存储在HDFS中的批量文件数据进行统计分析的案例,这些文件一般以csv或者txt文件格式存在。例如,存在这样一份消费者行为数据,字段包括消费…...

Docker镜像制作与推送

目录 Docker镜像制作 搭建私服 将本地镜像推送到私有库 Docker镜像制作 以创建一个新ubuntu镜像,并安装vim命令示例 运行一个ubuntu镜像,发现在镜像里面无法使用vim命令,因为该ubuntu镜像只包括了其最基本的内核命令 [rootlocalhost ~]…...

Pandas时序数据分析实践—基础(1)

目录 1. Pandas基本结构2. Pandas数据类型2.1. 类型概述2.1.1. 整数类型(int):2.1.2. 浮点数类型(float):2.1.3. 布尔类型(bool):2.1.4. 字符串类型(object&a…...

5.C转python

新始: 13.列表可被改变(数据),元组不可被改变(数据),二者皆与C中的数组的大致相同 14.创建列表方法: 1.一个[ ]就是一个空的列表 2.使用list函数来创建列表 如: 15.可以在[ ]内部指定列表的初始值,打印方法: 如: 16.在python中,在同一个列表中,可以放不同类型的变量(也可…...

输出SearchFacesResponse对象的JSON格式字符串回包乱码解决方案

输出SearchFacesResponse对象的JSON格式字符串设置响应内容类型为"application/json;charsetutf-8"获取响应的字符输出流将SearchFacesResponse对象转化为JSON字符串并输出。 代码片段 System.out.println(SearchFacesResponse.toJsonString(resp)); response.setC…...

第一章-09-相应类型-HTML格式

1.响应类型设置方式2.装饰器中指定响应类3.响应 HTML 格式设置响应类为 HTMLResponse,当前接口即可返回 HTML 内容...

G-Helper风扇控制终极指南:从静音办公到狂暴游戏的全场景调校

G-Helper风扇控制终极指南:从静音办公到狂暴游戏的全场景调校 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…...

AntiDupl.NET终极指南:快速清理重复图片的免费开源神器

AntiDupl.NET终极指南:快速清理重复图片的免费开源神器 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾为电脑中堆积如山的重复图片而烦恼&#xf…...

从静态分析到代码自愈:构建自动化自我审查工具提升代码质量

1. 项目概述:从“自我审视”到“代码自愈”的工程实践在软件开发的日常中,我们常常会陷入一种“当局者迷”的困境:自己写的代码,怎么看都觉得逻辑清晰、结构完美,但一旦交给同事评审或者上线运行,各种潜在的…...

VideoDownloadHelper终极指南:三分钟掌握免费视频下载插件

VideoDownloadHelper终极指南:三分钟掌握免费视频下载插件 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper VideoDownloadHelper是…...

别再用docker tag了!深入理解Containerd生态:crictl、ctr与nerdctl到底该怎么选?

深入解析Containerd生态:crictl、ctr与nerdctl的镜像管理实战指南 在容器技术快速发展的今天,越来越多的开发者正从Docker生态转向Containerd这一更轻量、更符合Kubernetes标准的运行时环境。但当我们真正开始使用Containerd时,往往会遇到一个…...

repomix:智能代码库混合工具,为AI编程与项目分析提供结构化输入

1. 项目概述:当代码库成为“黑盒”,我们需要一把钥匙 在软件开发的日常中,我们常常会面对一个既熟悉又头疼的场景:接手一个全新的、或者许久未碰的代码仓库。面对动辄几十上百个文件、错综复杂的目录结构,以及那些命名…...

Deepin Boot Maker:Linux启动盘制作的智能化解决方案

Deepin Boot Maker:Linux启动盘制作的智能化解决方案 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 在Linux系统安装领域,传统命令行操作的门槛让许多用户望而却步。Deepin Boot Maker作为…...

HSTracker:macOS上免费的炉石传说套牌追踪器终极指南

HSTracker:macOS上免费的炉石传说套牌追踪器终极指南 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 你是否想在macOS上免费提升炉石传说胜率?HS…...

Sekai Stickers:如何用这款开源工具快速创建个性化Discord表情包

Sekai Stickers:如何用这款开源工具快速创建个性化Discord表情包 【免费下载链接】sekai-stickers Project Sekai sticker maker 项目地址: https://gitcode.com/gh_mirrors/se/sekai-stickers 在Discord社区交流中,表情包已经成为表达情感、活跃…...