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. 测试用例excel模板

    Index Precondition Action Test Data Expect Result Excute Date Pass/Fail

  2. pandas replace函数使用小结

    http://blog.csdn.net/kancy110/article/details/72719340

  3. Word插入圆圈数字

    https://wenku.baidu.com/view/3260a2f0a1c7aa00b52acb5a.html Word 中在对应位置输入四位字符,选中字符(如:选中 2473 ),按 Alt+ ...

  4. UVaLive 3353 Optimal Bus Route Design (最小费用流)

    题意:给定一个 n 个点的有向带权图,让你找若干个圈,使得每个结点恰好属于一个圈,并且总长度尽量小. 析:一开始想的是先缩点,先用DP,来求... 题解给的是最小费用流或者是最佳完全匹配,其实都是一样 ...

  5. ansible-playbook api 2.0 运行项目

    上篇 api 的文章 <ansible-playbook api 2.0 直接运行> 介绍的是直接将 tasks 直接写在 代码中的,本文介绍 api 运行整个项目 [root@10_1_ ...

  6. 完美解决VC++6.0与Visio/office不兼容问题!!!

    话说电脑上如果装有VC++6.0编程软件和Visio或office办公软件,那么经常编程的人就会遇到下面的问题:VC打不开文件和工程,总是提示读取内存错误,点“确定”后vc自动关闭,但vc却能新建文件 ...

  7. C语言中线程和进程的区别

    线程是指进程内的一个执行单元也是进程内的可调度的实体,与进程的区别 1) 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 2) 并发性:不仅进程之间可以并发执行,同一个进程之间的多个线 ...

  8. 用Node完成AWS S3的Upload流程之全世界最简版

    开场: 查了两天文档,Error了38次,最后索性去掉所有附加条件, 连界面也不要了,在命令行里跑通了一坨最干瘪的Upload流程! 还冒着热气…… 在此先做记录,明天可以搭配美美的界面继续调试了. ...

  9. .Net socket服务器编程之为何也高效

    说到Socket编程,肯定大部分人举手c,c++.可惜现在已没有机会去追随并达到写服务器的水平,所以将就下还是考虑c#版的Socket服务器吧. 经过一番查询,试用.一些数据和事实还是浮出水面,同时对 ...

  10. Oracle 监听服务启动不了

    解决方法: 重新生成listener.ora文件   实施步骤 1,打开Net Configuration Assistant 2, 3, 4, 5, 6, 7,