关键字:wireshark, plugin, lua,protocol
概述
wireshark是非常流行的网络封包分析软件,功能十分强大。可以抓取各种网络包,并显示网络包的详细信息。
为什么使用wireshark
Troubleshoot network problems 定位网络问题
Debug protocol implementations 调试自己实现的协议
Learn network protocol internals 分析协议内部实现
分析网络性能
网络端点,统计每个端点的地址、发送或收到的数据包的数量和字节数。
网络会话,统计地址A 和地址B 端点间会话的发送或收到的数据包的数量和字节数。
协议分层,可查看各种协议的分布统计情况。
数据包长度分析。
架构
Wireshark是分析网络数据的利器,也是掌握计算机网络的工具。wireshark用C语言开发,架构合理。
wireshark从网络协议栈拷贝网络包,可以保存为pcap文件。
wireshark 内部实现
Plugin dissector
Decodes protocols that are newly added. 解析新的网络协议
Faster rebuilds and bug correction. (Due to stand alone librariesgenerated for each plugin dissector) 每个插件是单独的dll文件,这样可以快速替换插件,加快插件开发速度。
插件文件路径 : 安装目录/plugins/
Wiretap
used to read/write capture files pcap文件读写
winpcap (windows packet capture)是windows平台下一个免费,公共的网络访问系统。winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程。
插件(plugin)
Wireshark使用C语言编写而成,它支持动态链接库形式的插件扩展。除此之外,wireshark内置了Lua脚本引擎,可以使用Lua脚本语言编写dissector插件。
Wireshark lua proto API
function | description |
Proto.new(name, desc) | Creates a new protocol |
proto.dissector | The protocol's dissector |
proto.fields | The Fields Table of this dissector |
proto.prefs | The preferences of this dissector |
proto.prefs_changed | The preferences changed routine of this dissector |
proto.init | The init routine of this dissector |
proto.name | The name given to this dissector |
proto.description | The description given to this dissector |
Proto主要用途是声明一个新的协议,进而可以给它编写解析器函数
Wireshark提供了25种函数可以创建各种类型字段。
dissector函数的第一个参数buffer对应需要解析的二进制码流,第二个参数pinfo对应Packet List窗口的信息,tree是Packet Details窗口的树结构。
DissectorTable就是若干协议解析器(Dissector)汇集成Table,Wireshark默认支持了一系列 Dissector和DissectorTable。例如TCP端口号21是FTP协议采用的端口,wireshark遇到这种消息将自动调用FTP协议解析器来处理。
Udp协议字段示例
插件开发流程
- 创建一个Proto的对象,表示一种协议
- 创建几个ProtoField对象
- 把ProtoField对象加入到Proto里面
- 协议的解析函数dissector,收到相关数据包后,会调用
- 把自定义解析函数注册到解析器表DissectorTable
使插件生效,可以参考下面参考文档。
参考
Extending Wireshark For A NewProtocol.ppt
https://wiki.wireshark.org/LuaAPI/Proto
用lua语言编写wireshark插件解析OpenFlow协议 http://yuanjian.sinaapp.com/?p=242
使用Lua编写wireshark自定义协议解析插件 http://iqm.qq.com/list/article/80