1. 概述

wireshark提供了灵活的插件机制,使用户可以方便地扩展wireshark的功能。插件的功能主要包括,但不限于协议解析器。

可以使用Lua或C语言来编写Wireshark插件,下表对比了这两种方式,绿色背景代表占优的一方。

对比项目 C插件 Lua插件
开发难度 容易,只需要了解Lua语言
开发语言 难以掌握的C 轻巧方便的Lua
开发环境 C编译器、第三方库、复杂的环境搭建等等 文本编辑器即可
代码量
可测试性 方便
插件执行速度 非常快 较慢
可调用的已有功能代码 所有 仅一部分
部署方式 与主程序一起编译,或插件目录 插件目录

2. 待分析的杜撰协议

假定我们要分析一个私有协议Foo,这个协议使用UDP端口9877传输数据,其报文格式如下表所示,括号内为字节数:

type (1)

1 - 初始化

2 - 终止

3 - 数据

flag (1)

…….1 正常

……1. 拥塞

…..1..  优先

seqNo (2)

包序号

ipAddr (4)

IP地址

Data

不定长数据

产生此协议报文的C++程序如下(for VC++ on Windows)

// TODO:代码待修改

#include <WinSock2.h>
#include <stdio.h>
#include <time.h>
#pragma comment(lib, "ws2_32.lib") #define UDP_PORT_FOO 9877 struct proto_foo
{
UINT8 type;
UINT8 flags;
UINT16 seqno;
UINT32 ipaddr;
}; int main(int argc, char** argv)
{
int ret;
SOCKET sockfd;
SOCKADDR_IN addr;
proto_foo data;
INT16 seq = ; WORD dwVersion = MAKEWORD(, );
WSAData wsaData;
WSAStartup(dwVersion, &wsaData); sockfd = socket(AF_INET, SOCK_DGRAM, );
addr.sin_family = AF_INET;
addr.sin_port = htons(UDP_PORT_FOO); if(argc < )
{
printf("will send to 220.181.57.217\n");
addr.sin_addr.s_addr = inet_addr("220.181.57.217");
}
else
addr.sin_addr.s_addr = inet_addr(argv[]); data.ipaddr = 0x04030201;
for(;;)
{
srand((unsigned int)time(NULL));
data.type = rand() % + ;
data.flags = rand() % + ;
if(data.flags == )
data.flags = ;
data.seqno = htons(seq++); ret = sendto(sockfd, (const char*)&data, sizeof(proto_foo), ,
(SOCKADDR*)&addr, sizeof(addr));
if(SOCKET_ERROR == ret)
{
printf("sendto error\n");
break;
}
Sleep();
} closesocket(sockfd);
WSACleanup(); return ;
}

编译并运行以上程序,并用wireshark抓包保存,之后要使用这个pcap文件来测试编写的foo解析插件。

下面将要两种方式实现foo协议的解析插件,结合这个实例介绍这两种插件的开发方法。

【wireshark】插件开发(一):概述的更多相关文章

  1. 【wireshark】插件开发(五):C插件

    1. Wireshark对C插件的支持 每个解析器解码自己的协议部分, 然后把封装协议的解码传递给后续协议. 因此它可能总是从一个Frame解析器开始, Frame解析器解析捕获文件自己的数据包细节( ...

  2. 【wireshark】插件开发(三):Lua插件 Dissector

    // TODO: 部分内容需要修改 1. 骨架 首先新建一个文件,命名为foo.lua,注意此文件的编码方式不能是带BOM的UTF8,否则wireshark加载它时会出错(不识别BOM): -- @b ...

  3. 【wireshark】插件开发(二):Lua插件开发介绍

    1. Wireshark对Lua的支持 本节相关内容可参考Wireshark开发指南第10章”Lua Support in Wireshark”. Wireshark集成了Lua解释器,以支持Lua脚 ...

  4. Android中插件开发篇总结和概述

    刚刚终于写完了插件开发的最后一篇文章,下面就来总结一下,关于Android中插件篇从去年的11月份就开始规划了,主要从三个方面去解读Android中插件开发原理.说白了,插件开发的原理就是:动态加载技 ...

  5. 【wireshark】插件开发(四):Lua插件Post-dissector和Listener

    1. Post-dissector post-dissector和dissector不同,它会在所有dissectors都执行过后再被执行,这也就post前缀的由来.post-dissector的构建 ...

  6. 【wireshark】Wireshark原理分析与二次开发系列

    1.版权声明 本系列文章是本人花了很多心血写成,wireshark本是开源软件,本人也乐于技术知识和经验的分享,更是欣赏和推崇开源精神,因此任何看到本文的人都可以随意转载,但只有一个要求: 在大段甚至 ...

  7. Wireshark插件编写

    Wireshark插件编写 在抓包的过程中学习了使用wireshark,同时发现wireshark可以进行加载插件,便在网上学习了一下相应的插件开发技术. 需求编写一个私有协议名为SYC,使用UDP端 ...

  8. 浅谈Excel开发:一 Excel 开发概述

        做Office相关的开发工作快一年多了,在这一年多里,在插件的开发中遇到了各种各样的问题和困难,还好同事们都很厉害,在和他们的交流讨论中学到了很多的知识.目前Office相关的开发资料是比较少 ...

  9. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

随机推荐

  1. Jmeter如何把CSV文件的路径设置成一个变量,且变量的值是一个相对路径

    首先,在Jmeter中,通过User Defined Variables设置一个变量用来存储CSV文件所在文件夹的相对路径 备注: 这个相对路径前面不要加.\ 加了的话在运行的时候会报错,提示找不到那 ...

  2. 局部方法$("html").load()和全局方法$.get()、$.post()

    一..load() .load()方法可以参数三个参数:url(必须,请求 html 文件的 url 地址,参数类型为 String).data(可选,发送的 key/value 数据,参数类型为 O ...

  3. 如何优化Mysql数据库

    1.添加主键ID 2.尽量避免使用select * form table 3.创建索引     对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或 ...

  4. 详解Windows Service Wrapper(winsw.exe)及应用场景

    winsw.exe可以帮助nginx作为windows服务自启动,不需要每次都输入命令,很方便,使用到目前为止这种做法的效果很完美.你得到了 Windows 服务的支持,而且在服务重启时没有遗留孤立的 ...

  5. 微信小程序 发送模版消息

    微信小程序开发之发送模板消息 1,小程序wxml页面form表单添加 report-submit="true" <form bindsubmit="sub" ...

  6. 【Unity】2.0 第2章 Unity编辑器和基本操作

    分类:Unity.C#.VS2015 创建日期:2016-03-26 本章要点: 1.掌握Unity 5.3.4编辑器视图和菜单项及其含义,这是入门的最基础部分,必须掌握. 2.了解最基本的操作,先学 ...

  7. ubuntu编译centos7部署大象医生 dr-elephant

    github下载源码 ubuntu上安装play,配置好环境变量 暂时不支持基于spark2.x的编译,所以compile.conf中spark版本不变 调用build.sh开始编译 编译好后dist ...

  8. HDU 4355 Party All the Time (三分求极值)

    题意:给定x轴上有n个点,每一个点都有一个权值,让在x轴上选一个点,求出各点到这个点的距离的三次方乘以权值最小. 析:首先一开始我根本不会三分,也并没有看出来这是一个三分的题目的,学长说这是一个三分的 ...

  9. Python之Pandas中Series、DataFrame

    Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...

  10. qq强制聊天工具

    当你想和别人聊天, 别人有不理你的时候可以用上哦!!!特别是情人吵架的时候, 呵呵 复制下面的代码: @echo off title DIY-QQ强制聊天工具color 0a echo. echo.  ...