wireshark插件编程总结

原创 2015年07月08日 16:17:30
   /*
    hf_register_info:可以一个子类型一个这个结构体。
    此结构是一个用于代表协议中用于解析各个字段信息的结构。使用的时候,通常使用数组方式来代表协议中的诸多字段
    我们定义了3个结构,用于表示协议的3个字段,这个数组的结构解释如下
    1) 元素1: 保存标识的引用变量
    赋值列表中,&hf_foo_pdu_type代表取得hf_foo_pdu_type的地址,hf_foo_pdu_type初值必须为-1,后续在对此数组进行注册的时候,
    会对hf_chat_user进行赋值,保存此结构单位的标识
    2) 协议字段名称
    字符串"Type",作为参数传递给此结构,代表在详细信息窗口中,此结构对应的协议字段的名称信息
    3) 过滤器名称
    字符串"foo.type"为一过滤字符串。Wireshark允许针对某一协议进行过滤,可以针对某一协议字段进行过滤。即我们可以在Filter中输入
    foo.type == "Data"的方式来过滤出"数据类型"的数据包
    4) 协议字段类型: 用于标识此协议字段的敏感类型
        4.1) FT_BOOLEAN为一枚举值,表示敏感的协议字段为布尔型 
        4.2) FT_BYTES: 字节型
        4.3) FT_STRING: 字符串型
        4.4) FT_IPv4: IPv4格式
        4.5) FT_UINT16: INT16长整型
    5) 此字段在详细信息中数据的进制显示方式
        5.1) BASE_DEC: 十进制方式显示
        5.2) BASE_HEX: 二进制方式显示
        5.3) BASE_NONE: 普通方式
    6) 此协议字段的值对应的显示内容列表,当目标协议的数据包有不
    同类型的时候会使用到这个字段,我们用VALS宏来把上表与数据的相应
    部分关联起来,这样可以针对不同类型的数据包进行分类
    7) 字段敏感掩码,类型为整数,通常写成十六进制    如:我们需要处理的字段为一个字节的高四位,
    但是前面第四部分索要处理的部分写的是一个字节, 此处我们就可以填入0xf0,来去掉低四 位对相关计算的影响
    8) 保留字段: 填写0、后者NULL均可
    9) HFILL 为一个宏,代表一段固定常用值
    */
<pre name="code" class="cpp"> &hf_foo_flags,
 {
"Flags", "foo.flags",
 FT_UINT8, BASE_HEX, 
 NULL, 0x0, 
 NULL, HFILL
 }
这时我们得到的是:

Flags: 0x04
真实值也是0x04
</pre><pre name="code" class="cpp">当我们设置了字段敏感掩码,
<pre name="code" class="cpp">&hf_foo_flags,
{
 "Flags", "foo.flags",
 FT_UINT8, BASE_HEX, 
 NULL, 0xf0, 
 NULL, HFILL
 }


则相应的位的值不算在内,并且前面会显示所对应的掩码的位的值。
0000 .... = Flags: 0x00
而真实值是0x04


关与结构体tvbuff

struct tvbuff {
	/* Doubly linked list pointers */
	tvbuff_t                *next;

	/* Record-keeping */
	const struct tvb_ops   *ops;
	gboolean		initialized;
	guint			flags;
	struct tvbuff		*ds_tvb;  /**< data source top-level tvbuff */

	/** We're either a TVBUFF_REAL_DATA or a
	 * TVBUFF_SUBSET that has a backing buffer that
	 * has real_data != NULL, or a TVBUFF_COMPOSITE
	 * which has flattened its data due to a call
	 * to tvb_get_ptr().
	 */
	const guint8		*real_data;

	/** Length of virtual buffer (and/or real_data). */
	guint			length;

	/** Reported length. */
	guint			reported_length;

	/* Offset from beginning of first TVBUFF_REAL. */
	gint			raw_offset;
};

其中的real_data指向真是的数据区,其开始就是我们所想要的帧的第一个字节。其为const*,所以我们不能改变其所指内容,但是可以改变他。

因为从guint8 packet_type = tvb_get_guint8(tvb, 0);这个函数的使用就可以看出来。

这个函数时取出real_data缓冲区的第一个字节。

wireshark omci 解析插件

  • 2017年08月28日 14:57
  • 12KB
  • 下载

使用lua脚本编写wireshark协议插件

使用wireshark做协议分析,自定义协议可以编写Dissector插件进行分析,开始考虑使用c语言编写插件,了解了一下,发觉太麻烦,在效率要求不高的情况下,可以使用lua脚本编写插件: 要使...
  • cchao
  • cchao
  • 2012年08月03日 02:05
  • 665

CMCC Portal Wireshark 插件

  • 2017年07月20日 13:32
  • 5KB
  • 下载

Wireshark自定义协议RPUDPDL-同序号包统计插件

rpudpdl-stat-ssidsn.lua -- reference "Wireshark User's Guide - Chapter 11. Lua Support in Wireshark"...
  • Morphad
  • Morphad
  • 2013年11月29日 13:22
  • 1438

wireshark协议解析插件【LUA】示例

此文章参考: http://www.cnblogs.com/zzqcn/p/4840589.html 这里简单的贴出两份代码,更多详细资料请参考上面文章。 C语言代码: #include ...
  • Hot_VC
  • Hot_VC
  • 2016年03月21日 10:56
  • 618

用Lua语言编写Wireshark dissector插件

from: http://yoursunny.com/t/2008/Wireshark-Lua-dissector/ Wireshark是一款著名的网络协议分析工具,基于GPLv2协议开源,...
  • nomad2
  • nomad2
  • 2011年12月15日 18:45
  • 2760

Wireshark插件的编写(转帖)

原文地址:http://blog.tianya.cn/blogger/post_show.asp?BlogID=2338564&PostID=19226926     所谓插件技术,就是在程序的...
  • comhaqs
  • comhaqs
  • 2012年02月07日 16:34
  • 1386
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:wireshark插件编程总结
举报原因:
原因补充:

(最多只允许输入30个字)