如何在wireshark里用lua脚本编写dissector解析HTTP BODY (after TCP reassembled)

本文讲述如何用wireshark支持的lua脚本语言编写解析器(dissector)来解析HTTP Body部分的内容。Wireshark本身提供的HTTP Body(MIME)媒体内容的解析有限,多为直接显示文本内容,但有时我们在查看抓包时希望能看到进一步的协议解析结果。本文介绍的内容可以帮助有这方面需要的朋友直接编写解析器,进一步解析HTTP Body部分(无论是GET/POST的HTTP Body,还是应答消息的Body)。另外,用lua的好处是不需要用C编译器来写解析器,只要用户文本编辑器写一个lua脚本就可以用了。

 

我尝试了几种方法,最后在看了wireshark http相关源代码后才找到了比较理想的解析方法。中间走了一些弯路:

1. 刚开始可能认为用postdissectors可以,但是post-dissector解析器本身只能得到一个个独立的当前包的数据,而在HTTP Body媒体内容跨多个TCP包时post-dissector方式就不行了(所谓的reassemble PDU问题)。

2. 直接写dissector来替换http协议的dissector,在自己写的dissector里调用http后再解析http body的方式也不合适。

 

最后看到wireshark http解析代码里创建了一个media_type的dissector table,专门用于解析媒体内容的,我们只用编写dissector注册到media_type表里,而不是tcp.port表里。

 

具体dissector代码样例如下:

从以上代码可以看出,当我们希望解析那种HTTP Body媒体类型时,就在media_type里注册这种类型。以上代码的含义是自己编写的dissector替换原来的HTTP Body媒体类型Content-Type为"application/x-www-form-urlencoded"、"text/html"和"image/jpeg"的解析器(实际上例子只是自己加了一个节点,然后再在这个节点下用原来的解析器再解析了一下)。

 

在实践中建议大家还是针对每种媒体类型编写一个dissector,然后用类似以下代码注册到media_type:

         local media_type_table = DissectorTable.get("media_type")

         media_type_table:add("application/x-www-form-urlencoded", your_dissector)

 

一个实际的例子请参考《用Wireshark lua编写的协议解析器查看Content-Type为application/x-www-form-urlencoded的HTTP抓包》(http://blog.csdn.net/jasonhwang/archive/2010/04/25/5525700.aspx),该例子是在wireshark抓包界面树里进一步解析Content-Type为"application/x-www-form-urlencoded"的form提交的HTTP请求包。

 

注:wireshark版本为1.2.7

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值