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. 【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的 ...

  2. 创建WRAPPER时, SQL20076N 未对指定的操作启用数据库的实例。

    您可以通过运行DB2 UPDATE DBM CFG USING FEDERATED YES来设置这个参数.修改这个参数后,必须重新启动实例才会生效(DB2STOP/DB2START).所以你会出现你的 ...

  3. UUID含义及ubuntu配置系统默认JDK

    UUID含义是通用唯一识别码(Universally Unique Identifier) GUID是一个128位长的数字,一般用16进制表示.算法的核心思想是结合机器的网卡.当地时间.一个随即数来生 ...

  4. 导出jar文件

    当我们编好一段代码时,就需要将其导出成应用程序,即jar文件(jar文件就是在Java运行环境下运行的应用程序).今天,巩固就教大家用eclipse导出jar文件. 第一步:找到eclipse,双击打 ...

  5. 转一篇做BI项目的好文

    首先,我们有一个大的假设前提,集团报表平台是服务于大型公司,比如有很多分公司,子公司,多部门等,并且有BI需求的访问人群超过1000以上的公司. 这样,我们的关键词是:集团 平台 运营 集团:意味着, ...

  6. python网络编程应用(一)

     在之前的一篇博客<python网络编程基础>中介绍了socket.socket()函数及其应用,其实socket模块中还有很多属性可供网络应用程序使用.这里将详细讲解一下socket模块 ...

  7. Delphi 动态链接库的动态和静态调用 (仔细读一下)

    http://blog.163.com/bxf_0011/blog/static/35420330200952075114318/ 为了让人能快速的理解 静态调用.动态调用,现在做一个函数封装在一个D ...

  8. WinRT 中检查 WiFi 是否可用

    public static bool IsWifiConnected() { bool isWifiConnected = false; ConnectionProfile currentConnec ...

  9. what is HTTP OPTIONS verb

    The options verb is sent by browser to see if server accept cross origin request or not, this proces ...

  10. 玩了下STM8单片机

    偶然的机会,发现STM8真是又便宜又好用啊,哈哈! 买了一个STM8S103F3的小板子,再加一个ST-Link调试器,总共才35块钱!对于我们这种玩习惯了动辄上千上万的FPGA开发板的人来说,就是白 ...