精华内容
下载资源
问答
  • lua语言学习之自定义wireshark插件来解析自定义协议关于wireshark这个抓包工具关于lua使用lua写wireshark插件wireshark接口文档如何在wireshark使用自己写的lua脚本检查是否可以运行lua导入脚本使用教程及完整代码 ...

    关于wireshark这个抓包工具

    wireshark工具的功能十分强大,它可以抓取你想抓取的主机的所有网络封包。并且对于一般的网络协议,wireshark可以做到自动解析数据。可以用它来干坏事,你也可以用来测试一个你自己封装的网络协议的安全性,再或者测试一个新的协议是否可行等等。剩下的自行百度,本菜鸟也不精通。

    关于lua

    由于需求,百度第一次发现还有一种叫”撸啊“的语言,不禁让我想起了LOL。(扯远了~) lua是一种用c语言写的轻量级语言,源码好像说只有2.4万行c,安装教程可以百度菜鸟教程。但是当我们在wireshark上使用时是不需要安装环境的,因为wireshark继承了lua的解释器,且给用户留了API供数据包处理。这里有几点要说明的:

    1. lua语言在wireshark上使用时,你的调试过程完全不依赖lua的环境,所以你不需要安装lua的包,只需要wireshark加载你写的name.lua就可以(可以用文本编辑器写,后缀为.lua)。至于怎么加载,请往下翻。
    2. lua语言经过我的苦战之后发现其不足之处–虽然它是用c写的,但是它没有继承c语言的位操作。也就是说没有<< >> || &&等操作。要这个有啥用呢? 首先,如果你想要解析一包网络数据里面的一段信息,一般一包数据的发送都是以大端发送,若涉及8bit以上的包解析,你肯定要用到位运算,故用lua你就要想别的办法解决。
    3. 在wireshark里面的接口和lua的环境没任何关系,你只能用wireshark调试,比较麻烦。
    4. 剩下的基本能百度到

    使用lua写wireshark插件

    先看代码和解析,然后再去后面看接口相应文档:
    首先打开文本编辑器,新建一个(你想写的名字).lua的文件。加入以下代码:

    local _808_proto = Proto ("2013","2013","Self-defined Protocol")
    
    --以下根据协议定义消息字段--
    --标识符
    local _808_message_flag_start= ProtoField.uint8("_808_message_flag_start", "start_flag", base.HEX)    --  消息标识符
    local _808_message_flag_end = ProtoField.uint8("_808._message_flag_end", "end_flag", base.HEX)
    --消息头
    local _808_message_id = ProtoField.uint16("_808.messageid", "Message ID", base.HEX)    -- 消息id
    local _808_message_property = ProtoField.uint16("_808_message_property", "Message Property", base.HEX) --消息体
    
    -- 将字段添加都协议中
    _808_proto.fields = {
    	_808_message_flag_start,
    	_808_message_flag_end,
    	_808_message_id,
        _808_message_property,
    }
    

    这段话是创建字段的意思,看下图:

    在这里插入图片描述
    上述代码里出现的变量后面定义的字段名字出现在第一部分红圈里面。然后,怎么让它在后面显示你想解析的字段?继续看下面:

    function _808_proto.dissector(tvb, pinfo, treeitem)
    

    这个函数是用来解析报文用的,参数tvb里面放了有用的报文,wireshark自动帮你过滤了tcp/ip报头,tvb从0开始就是你要抓得有用数据。但是tvb并非数组,本菜鸟后来也没有摸清里面的数据结构,反正也不是字符串。解析完成后,用tvb(x,y)的形式取出数据。x指起始位,(从0开始)y指从x起向后几位。
    下面贴出部分代码:

    function _808_proto.dissector(tvb, pinfo, treeitem)
    	
    	-- 设置一些 UI 上面的信息
    	pinfo.cols.protocol:set("_808")
    	pinfo.cols.info:set("_808 Protocol")    
    	
    	local offset = 0
        local tvb_len = tvb:len()
     
    	-- 在上一级解析树上创建 _808 的根节点
    	local _808_tree = treeitem:add(_808_proto, tvb:range(tvb_len))
       --创建消息标识位树--
       local Ms_flag_bit=_808_tree:add(_808_proto,"MSG_FLAG_BIT")
              Ms_flag_bit:add(_808_message_flag_start,tvb(0,1))             --暂不解析
       --创建消息头树--
       
    		Ms_head_tree=_808_tree:add(_808_proto,"MSG_HEADER: 0x"..tvb(1,16))   
    	      Ms_head_tree:add(_808_message_id,tvb(1,2))       --消息id显示
    		  Ms_head_tree:add(_808_message_property,tvb(3,6))   --消息属性显示
    		  --消息属性子树
    	   
    		local  Ms_end=_808_tree:add(_808_proto,"end_flag")	
    		
    			Ms_end:add(_808_message_flag_end,tvb(tvb_len-1,1))
    		  	
    end
    

    wireshark接口文档

    这里贴出大佬的网站,下面有中文介绍
    链接: https://www.cnblogs.com/zzqcn/p/4827337.html.声明一下,这位老哥的文档对我这个英语菜鸡给了很大帮助,所以帮他打广告,开个传送门在这里。

    如何在wireshark使用自己写的lua脚本

    既然写了就要用,那么下面介绍如何运行脚本:

    1. 打开Wireshark,点击help -> about Wireshark 看看是否支持lua

    在这里插入图片描述
    2. 然后打开wireshark的安装目录下的init.lua文件(可在安装目录下面搜索),看看如下的值是否为false 是则开启了lua插件。
    在这里插入图片描述
    3. 将上述打开的init.lua文件拉到最后,会看见一个名dofile的函数,如下图:
    在这里插入图片描述
    被马赛克的部分就是你的lua脚本的路径了
    在dofile函数里面写上自己将lua插件存放的路径即可,为保证不被转义,最好使用”\”分割。
    4.完成上述动作后,重启wireshark即可完成插件的重新加载。若要更改此插件,改完后需重启wireshark或者点击分析->重新加载插件即可。

    使用教程及完整代码

    教程
    打开wireshark,若有错误,会有窗口报错。若无则像下面这样使用:
    在这里插入图片描述点击Fliter,输入你定义的协议名字,搜索到后,选择网卡设备,点击1或者start开始抓包,开始后需要光标移动到fliter后回车,过滤生效。然后解析你的数据包。

    在这里插入图片描述
    下面贴出部分源代码,由于涉及保密信息,只能贴应用代码,关于解析数据的代码,有大佬可以讨论一下,毕竟没有移位操作可太难了。

    local _808_proto = Proto ("2013","2013","Self-defined Protocol")
    
    --以下根据协议定义消息字段--
    --标识符
    local _808_message_flag_start= ProtoField.uint8("_808_message_flag_start", "start_flag", base.HEX)    --  消息标识符
    local _808_message_flag_end = ProtoField.uint8("_808._message_flag_end", "end_flag", base.HEX)
    --消息头
    --local  MSG_HEAD=ProtoField.uint32("_808.MSG_HEAD","MSG_HEAD",)
    local _808_message_id = ProtoField.uint16("_808.messageid", "Message ID", base.HEX)    -- 消息id
    local _808_message_property = ProtoField.uint16("_808_message_property", "Message Property", base.HEX) --消息体属性
    	  
    ---消息体
    
    
    
    -- 将字段添加都协议中
    _808_proto.fields = {
    	_808_message_flag_start,
    	_808_message_flag_end,
    	_808_message_id,
        _808_message_property,
    }
    
    function _808_proto.dissector(tvb, pinfo, treeitem)
    	
    	-- 设置一些 UI 上面的信息
    	pinfo.cols.protocol:set("_808")
    	pinfo.cols.info:set("_808 Protocol")
    	
    	local offset = 0
        local tvb_len = tvb:len()
     
    	-- 在上一级解析树上创建 _808 的根节点
    	local _808_tree = treeitem:add(_808_proto, tvb:range(tvb_len))
       --创建消息标识位树--
       local Ms_flag_bit=_808_tree:add(_808_proto,"MSG_FLAG_BIT")
              Ms_flag_bit:add(_808_message_flag_start,tvb(0,1))             --暂不解析
       --创建消息头树--
       
    		Ms_head_tree=_808_tree:add(_808_proto,"MSG_HEADER: 0x"..tvb(1,16)) 
    	      Ms_head_tree:add(_808_message_id,tvb(1,2))   
    		  Ms_head_tree:add(_808_message_property,tvb(3,6))
    		  --消息属性子树
    	   
    		local  Ms_end=_808_tree:add(_808_proto,"end_flag")	
    		
    			Ms_end:add(_808_message_flag_end,tvb(tvb_len-1,1))
    		  	
    end
    -- 向 wireshark 注册协议插件被调用的条件
    local tcp_port_table = DissectorTable.get("tcp.port")
    tcp_port_table:add(8010, _808_proto)
    
    
     
    
    
    展开全文
  • 介绍如何使用wireshark lua插件新增私有协议解析器

    本文将介绍如何使用wireshark lua插件实现私有协议的解析,通过一个具体的示例加以描述,作为我的专栏《wireshark从入门到精通》中的一篇。

    虽然wireshark提供了现存绝大多数公开协议解析功能,目前V3.2.2版本协议数量在2500+,如图1:

    在这里插入图片描述
    图1

    但是这也并不能够完全满足一些定制化的需求,因为很多的私有协议通常都是基于TCP/IP协议族。例如传输层为TCP协议,应用层是私有协议。作为一个应用广泛的协议解析平台,对于私有协议的解析是wireshark提供lua接口的主要原因,这能够充分利用wireshark对于公开协议的解析能力。由于私有协议的种类繁多,本文并没有使用一个具体的私有协议进行讲解。而是通过在HTTP层上层在新增一层的协议的显示功能,描述了增加私有协议解析器的通用操作方法。如下的代码则是实现了在HTTP上层新增一层显示五元组信息:

    local getSrcIp = Field.new("ip.src")
    local getDstIp = Field.new("ip.dst")
    local getSrcPort = Field.new("tcp.srcport")
    local getDstPort = Field.new("tcp.dstport")
    local getIpProto = Field.new("ip.proto")
    
    local fields = {getSrcIp,getDstIp,getSrcPort,getDstPort,getIpProto}
    
    local quintuple = Proto.new("Quintuple", "Quintuple")
    
    local quintupleIpSrc = ProtoField.new("IP SRC", "ipsrc", ftypes.IPv4)
    local quintupleIpDst = ProtoField.new("IP DST", "ipdst", ftypes.IPv4)
    local quintupleTcpSrc = ProtoField.new("TCP SRC", "tcpsrc", ftypes.UINT16)
    local quintupleTcpDst = ProtoField.new("TCP DST", "tcpdst", ftypes.UINT16)
    local quintupleIpProto = ProtoField.new("IP Proto", "ipproto", ftypes.UINT8)
    
    local quintupleFields = { quintupleIpSrc, quintupleIpDst, quintupleTcpSrc, quintupleTcpDst, quintupleIpProto }--用于wireshark界面显示
    
    quintuple.fields = { quintupleIpSrc, quintupleIpDst, quintupleTcpSrc, quintupleTcpDst, quintupleIpProto }--加入expression中的过滤条件
    
    function quintuple.dissector(tvbuf,pktinfo,tree)
        local subtree = nil
        for i, field in ipairs(fields) 
    
        do
            atuple = field()
            if atuple
            then
                if not subtree 
                then
                    subtree = tree:add(quintuple)
                end
                --print(atuple.type)
                subtree:add(quintupleFields[i], atuple.value)
    
            end
        end
    
    end
    
    -- 注册 postdissector
    register_postdissector(quintuple, true)
    

    相应的执行命令为:

    wireshark -r test.pcap -X lua_script:chajian.lua
    

    前面的文章中一般都是使用tshark命令,此处使用的是wireshark命令,因为要使用到图形界面进行显示,如图2:

    在这里插入图片描述
    图2

    可以看到在wireshark的显示区域增加了Quintuple这一层来显示五元组对应的信息,如果HTTP上层是私有协议数据的话,需要逐个字节的解析上层数据,将解析的内容填到该层对应的字段中即可,操作思路可参照上述的代码。同时还可以发现在expression中的过滤条件增加了五元组的过滤选项 ,如图3:

    在这里插入图片描述
    图3

    上述即如何新增一层协议解析功能的方法描述,对于私有协议来说,稍微麻烦的是逐个字节的解析,其余的均和上述代码一致。

    本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里

    展开全文
  • 今天尝试用Visual Studio 2005编译以前用Visual Studio 2003编译成功过的一个Wireshark插件,生成后发现居然无法在官方的Wireshark中加载插件。在KenThompson的“Creating Your Own Custom Wireshark Dissector”...

    今天尝试用Visual Studio 2005编译以前用Visual Studio 2003编译成功过的一个Wireshark插件,生成后发现居然无法在官方的Wireshark中加载插件。在 KenThompson的“Creating Your Own Custom Wireshark Dissector”一文中提到使用Visual Studio 2005编译生成的插件只能在使用Visual Studio 2005生成的Wireshark版本中测试。使用自己采用Visual Studio 2005生成的Wireshark版本测试,发现确实可以,而官方的就不行了。使用Dependency Walker看了看,发现使用Visual Studio 2005生成的DLL文件需要使用MSVCR80.DLL,而官方的Wireshark使用的是MSVCRT.DLL,两者不兼容,所以会出现错误。在微软的网站上可以找到解决的方法

          mt.exe –manifest MyLibrary.dll.manifest -outputresource:MyLibrary.dll;2

    将这样处理后的DLL再拷贝到官方的Wireshark的插件目录中就可以了。不过采用Visual Studio 2005生成的插件要分发时必须同时分发Visual Studio 2005的C语言运行库,看来不如Visual Studio 2003方便。

    转载于:https://www.cnblogs.com/zealsoft/archive/2009/04/24/1443219.html

    展开全文
  • Wireshark 提供了Lua API 来按需处理和分析报文,如何使用wireshark插件来分析和处理报文,我在前面的文章中或多或少的都有提及,当然我在这里也做了较为全面的说明,可以参考下。在编写完lua脚本之后,需要利用...

    Wireshark 提供了Lua API 来按需处理和分析报文,如何使用wireshark插件来分析和处理报文,我在前面的文章中或多或少的都有提及,当然我在这里也做了较为全面的说明,可以参考下。

    在编写完lua脚本之后,需要利用tshark来加载该脚本。如果需要全自动的执行,显得不是特别友好,当然可以在shell脚本中进行启动。除此之外,还可以在python中调用lua插件以及传递参数。近期我在github上发现一个开源项目,就是通过对于tshark的封装,可以直接在python中调用lua脚本功能。本文就简单介绍一下该功能,感兴趣的小伙伴可以按照本文的方法试一试。

    1,项目地址,这里

    既可以直接安装:pip install pyshark,也可通过源码安装

    git clone https://github.com/KimiNewt/pyshark.git

    cd pyshark/src

    python setup.py install

    因为初次使用可能对于该模块有很多的疑问,同时该模块的说明文档写的比较简单,因此使用源码安装,在出现问题的时候,可以在源码中进行调试,有助于理解程序。本身这个项目的代码较少,阅读起来难度并不大。

    2,程序示例,如下示例是我在python中加载lua脚本解码报文示例:

    def getHtmlFromPcap(pcapFileName,tsharkPara):

    import pyshark

    cap = pyshark.FileCapture(input_file=pcapFileName, custom_parameters=tsharkPara)

    cap.load_packets()

    #for pak in cap:

    #pas

    if __name__ == "__main__":

    fileDir = '/data/html/'

    param = [ '-X', 'lua_script:getHttpTitleAndDesc.lua','-X', 'lua_script1:'+fileDir,'-X', 'lua_script1:data-text-lines']

    commFunc.getHtmlFromPcap(aPcapFileName,param)

    由于tshark中涉及的参数众多,对于这些参数的处理pyshark是通过列表或者字典来进行传递的。由于tshark中涉及到lua脚本的参数都是通过-X来进行传递的。而字典中是不允许key值相同的,因此无法通过字典来传递lua脚本的参数,则只能通过列表进行传递,如程序中的param。由网络上使用wireshark的插件功能的人较少,同时项目文档介绍中也没有,因此我去简单的看了一下源码,使用列表来传递Lua脚本所需要的参数。这里是我在该项目当时的提问,最终还是由我自己解决了。

    当然pyshark对于tshark解析的结果也做了封装,可以直接调用pyshark中的类进行输出报文的信息。总之,wireshark能够提供的报文信息,pyshark基本上都是拿过来直接使用的,很方便python中进行使用。但是在使用中存在的问题就是内存可能占用较高,由于要将报文读取到内存之中,因此占用的内存依赖于报文的大小,在实际的使用过程中要加以注意。

    当然关于pyshark更多的使用方法,可以参考如下两个链接:

    1,参考一

    2,参考二

    本文为CSDN村中少年原创文章,转载记得加上小尾巴偶,博主链接这里。

    展开全文
  • 1.ProtoField包含哪些字段及意义? 2.如何将一个秒数转换成时间戳? 3.没有用local声明的变量不都是全局的吗?为什么我在一个.lua中,不同地方使用,不像全局变量那样?
  • 使用Lua编写Wireshark的Dissector插件

    千次阅读 2015-04-19 10:27:39
    使用Lua编写Wireshark的Dissector插件是本文要介绍的内容,Dissector 插件可以用来对特定的协议内容进行分析展示,在分析自己实现的应用层协议时还是很有用的。 dissector 插件一般用 C 来实现,具体如何实现可以...
  • 我的gitchat-如何利用 Wireshark 对 PCAP 报文实施批量增删改查
  • 使用lua编写Wireshark的dissector插件

    千次阅读 2010-06-26 21:11:00
    dissector插件一般用C来实现,具体如何实现可以参考Wireshark代码目录下面的/epan/dissectors中的源代码和plugins目录下面的源代码。一些简单的对性能要求不高的dissector插件也可以使用Lua来实现。Wireshark已经...
  • 前言 protobuf是google团队开发的用于高效存储和读取结构化数据的工具。相比于json和xml,protobuf会把数据...本文将介绍如何解析利用wireshark自定义插件,解析protobuf数据包。 概要 wireshark插件可以使用c或...
  • 使用lua编写Wireshark(Ethereal)的dissector插件 dissector插件可以用来对特定的协议内容进行分析展示,在分析自己实现的应用层协议时还是很有用的。dissector插件一般用C来实现,具体如何实现可以参考Wireshark...
  • 本章会讨论如何娴熟地将Wireshark作为网络排障工具来使用,先讲如何配置用户界面,再谈如何配置全局和协议参数,接下来将讨论Wireshark文件夹、配置文件、文件夹和插件[3] 。 本章还会讲解Wireshark的配色规则及配置...
  • wireshark源码

    热门讨论 2012-06-10 21:43:51
    - Makefile.nmake - 包含了针对Windows平台的Wireshark插件makefile - moduleinfo.h - 包含了插件版本信息 - moduleinfo.nmake - 包含了针对Windows平台的DLL版本信息 - packet-rdp.c - 这是您的解析器原代码文件 - ...
  • wireshark lua脚本

    2016-12-04 15:42:00
    2、如何使用wireshark lua插件  将编写的(假设为rssp2.lua)lua文本,放入wireshark 安装目录下,放哪里都行只要dofile添加了路径. 并且在安装目录下找到init.lua,最后一行添加路径代码 : dofile(DATA_DIR.....
  • 9.6 如何产生协议统计  如果你的协议已经有了一个窃听器接口,你可以使用它从协议追踪中产生一些有趣的统计信息(假设是有趣的吧!)  这个可以在一个分离的插件中完成,也可以在进行协议解析的同一个插件中...
  • 在Windows上编译Wireshark源代码

    千次阅读 2011-04-14 23:48:00
    <br />Wireshark 最近需要开发Wireshark插件,分析一套协议,于是首先要解决的问题就是如何在windows环境下编译Wireshark,编译过程中也借鉴了一些网上的资料,但是基本都有问题,在经历无数次的失败之后...
  • 虽然网上已经有了很多获取IP的qq插件,但是其原理大致都是相同的,但是插件的安全性而言就不敢恭维了,下面介绍如何利用wireshark获取好友ip。 一、打开wireshark选择本机网卡,由于我本机使用的是无线网卡,所以...
  • 《Dive into Windbg》是一系列关于如何理解和使用Windbg的文章,主要涵盖三个方面: 1、Windbg实战运用,排查资源占用、死锁、崩溃、蓝屏等,以解决各种实际问题为导向。 2、Windbg原理剖析,插件、脚本开发,剖析...
  • EasyNVR视频平台拉取RTSP流时,在使用wireshark抓包取RTP数据包时,如何把RTP传输的视频流保存成视频文件进行播放? 问题分析 在EasyNVR拉取摄像头的视频流时,通过wireshark抓包可以看到,EasyNVR与摄像头之间通过...
  • 全网最全fiddler使用教程和fiddler如何抓包(fiddler手机抓包)-笔者亲测: 一、前言 抓包工具有很多,比如常用的抓包工具Httpwatch,通用的强大的抓包工具Wireshark.为什么使用fiddler?原因如下: 1.Wireshark...
  • PCAP 报文就是抓取实际在网络中传输的图片,视频等数据,然后以 PCAP 格式存储形成的文件。有的时候会遇到将 PCAP 中的码流还原成相应的图片,视频等原有格式的需求。...使用 Wireshark Lua 插件还...
  • EasyNVR网页无插件直播平台经过多次的修正和改良,已经成为一套成熟的流媒体视频云服务平台,能够满足安防、智慧城市、教育等不同场景的应用需求。 测试EasyNVR拉流,在确认输入源问题的时候,一般会使用VLC进行...
  • 抓包那些事——四大抓包神器简介

    千次阅读 多人点赞 2018-11-16 00:07:44
    文章目录一、概述二、Wireshark过滤语法简单介绍优缺点三、Tcpdumptcpdump的简单使用介绍优缺点四、Charles优缺点五、mitmproxy安装使用1. 请求过滤2. 请求拦截3. 查看/编辑请求4. 重发请求5. 插件开发6. 保存抓到的...
  • 这是一个由 googlecode 上 jdrcom 项目中的 wireshark 插件 项目地址:(https://code.google.com/p/jdrcom/) 使用(for windows): 将 drcom_2016.lua 放到 Wireshark.exe 所在的目录下, 打开 init.lua ,在 ...
  • 如何使用Docker内的kafka服务》 《自己动手制作elasticsearch-head的Docker镜像》 《自己动手制作elasticsearch的ik分词器的Docker镜像》 《docker下,一行命令搭建elasticsearch6.5.0集群(带head插件和ik分词器)...
  • 使用插件 小结 如何以正确的姿势练习 前端项目的练习过程 Output is Input 练习框架、技术的时机 练习的过程 练习框架、技术的技巧 使用模板 做点什么应用 编写一个博客应用 输入和总结 其它 关于练...
  • 2017-07-19 博客Redis系列三 - Spring boot如何使用redis做缓存及缓存注解的用法总结对应git代码tag v0.1 2017-07-10 博客Redis系列二 - 通过redis命令和lua实现分布式锁对应git代码tag v0.1 2017-07-03 博客Redis...
  • wireshark 11、数据结构与算法 12、面试 13、大数据 14、架构 15、管理 16、扩展 领域驱动设计 区块链 人工智能 搜索引擎 网络安全 消息队列 云计算 AR&VR Docker Kubernets IoT 测试 其他语言 C C++ ...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

wireshark插件如何使用