精华内容
下载资源
问答
  • wireshark插件

    2014-07-22 21:19:40
    按照http://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html 的提示 下载源码包 nmake -f Makefile.nmake plugins

    按照http://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html 的提示


    下载源码包和依赖文件


    设置环境

    "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat

    编译插件

    nmake -f Makefile.nmake plugins

    展开全文
  • S7comm Plus wireshark 插件

    2020-10-16 16:15:40
    S7comm Plus wireshark 插件,用于wireshark 解析工控协议S7commen Plus;实测可用
  • wireshark插件开发

    2014-09-16 15:45:12
    wireshark插件开发,version_info
  • CMCC Portal Wireshark 插件

    2017-07-20 13:32:37
    中国移动Portal协议分析的Wireshark插件,可分析CMCC Portal协议。使用方法:1)将cmccportal.lua放到wireshark的安装根目录,2)修改wireshark根目录下的init.lua,在文件最后增加dofile(DATA_DIR.."cmccportal.lua...
  • 基于LUA的wireshark插件,利用listener搭建一个对esp协议包的包序号连续性检验的提示器
  • Wireshark插件批量修改报文

    千次阅读 2020-01-11 10:20:42
    通过三个场景介绍通过wireshark插件实现对于PCAP报文的修改,增加,删除等操作

    本文将通过一些示例介绍如何使用wireshark插件修改 PCAP 报文中的数据内容,具体包括增加一片报文中协议层,删除整个文件中多余的报文,为整个文件增加一些必要的报文片等,作为我的专栏《wireshark从入门到精通》中的一篇。

    在抓包不是很方便的情况下,需要去构造或者修改一些特定格式的报文用以数据的测试。当然wireshark中手动方式也是可以修改报文的,在本专栏的前述文章也有提及。但是突出的问题就是效率非常的低下,如果要求修改1000个报文的话,相信你并不会使用手动的方式,那么本文的插件方式应该会帮到你。

    场景一

    通常抓包获取的报文中TCP上层的HTTP层只有一层,现在要求构造一个特殊的测试报文,使得应用层包含两个HTTP层的报文头,如图1:
    enter image description here
    图1
    其实整体的思路并不复杂,即在一个HTTP报文中,将HTTP的头部复制一份,插入到HTTP报文头和body之间即可,实现代码如下:

    
        local getTcpStream = Field.new("tcp.stream")
        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 getIpVersion = Field.new("ip.version")
        
        local getIpLen = Field.new("ip.len")
        local getArrivalTime = Field.new("frame.time_epoch")
        local getTcpLen = Field.new("tcp.len")
        
        local tcpStreamTable = {}--每一条流的索引哈希表  
        local dataWriterTable = {}--每一条流的dumper表
        local getHttpHost = Field.new("http.host") 
        local count = 0
        
        do
            local function packet_listener()
                local tap = Listener.new("frame", "tcp")
                --frame是监听器的名称,TCP是Wireshark过滤器规则
        
                function tap.reset()
                    print("tap reset")--
                end
        
                function tap.packet(pinfo,tvb)
                    --回调函数,每收到一个包执行一次。
                    count = count + 1
                    local tcpStream = getTcpStream()
                    local srcIp = getSrcIp()
                    local dstIp = getDstIp()
                    local srcPort = getSrcPort()
                    local dstPort = getDstPort()
                    local ipVersion = getIpVersion()
                    local tcpStreamNumber = tonumber(tostring(tcpStream))
                    local ipLen = tonumber(tostring(getIpLen()))
        
                    local tcpLen = tonumber(tostring(getTcpLen()))
                    local arrivalTime = tonumber(tostring(getArrivalTime()))
                    local httpHost = getHttpHost()
        
                    if(tcpStreamTable[tcpStreamNumber])
                    then
                        if(httpHost)
                        then
                            bytearray_fri = tvb:bytes(0,tvb:len())
                            httpStartPos = (tvb:len() - tcpLen)
                            --print (bytearray_fri:get_index(16))
                            --print (bytearray_fri:get_index(17))                   
                            bytearray_sec = tvb:bytes(httpStartPos,tcpLen)
                            --bytearray:__concat(bytearray_fri, bytearray_sec)
                            bytearray_fri:append(bytearray_sec)
        
                            newIplen = ipLen + tcpLen
                            bytearray_fri:set_index(16,newIplen/256)
                            bytearray_fri:set_index(17,newIplen%256)
        
                            dataWriterTable[tcpStreamNumber]:dump(arrivalTime,PseudoHeader.eth(0),bytearray_fri)
                        else
                            dataWriterTable[tcpStreamNumber]:dump_current()
                        end
        
        
                    else
                        local packetTuple4 = tostring(tcpStream).."_"..tostring(srcIp).."_"..tostring(srcPort).."_"..tostring(dstIp).."_"..tostring(dstPort).."_"..tostring(ipVersion)..".pcap"
        
                        oldPcapName = packetTuple4
        
                        tcpStreamTable[tcpStreamNumber] = tcpStream
                        dataWriterTable[tcpStreamNumber] = Dumper.new(packetTuple4)
                        dataWriterTable[tcpStreamNumber]:dump_current()            
                        --print(type(tcpStreamTable[tcpStreamNumber]),type(tcpStreamNumber),type(dataWriterTable[tcpStreamNumber]),type(tcpStreamTable))
                    end
                end
        
                function tap.draw()
                    --结束执行
                    print("tap draw")
                    --os.rename(oldPcapName,newPcapName)   
                end
            end
            --监听报文 
            packet_listener()
        end
    
    • Field 以及 Listener 类在前一篇文章已经做了简单的介绍,可以查看之前的文章。
    • tvb:bytes表示将报文原始数据放到一个字节数组中(ByteArray 对象),然后就可以根据索引在该数组上进行修改等操作。ByteArray类当然也提供了 诸如append 尾部连接函数,get_index 函数获取具体索引值,set_index函数设置具体索引中的内容等。
    • Dumper 类的作用是生成 PCAP 格式报文。
    • PseudoHeader.eth(0)用于生成以太网格式报文头(当然也可以去掉以太网头部),在生成报文的时候,要把原来报文的 arrivalTime 记录下来,以便和原来的时间保持一致,如代码所示。
    • 程序中还设置了两个变量:local tcpStreamTable = {}:每一条流的索引哈希表,用于建立流索引。local dataWriterTable = {}:每一条流的 dumper 表,用于将每条流单独输出成一个独立的报文,当然你也可以不去分流输出,还是存成一个报文,做相应修改即可。这里面设置了dataWriterTable 这个表,在后面的切流那个章节会用的上。

    场景二

    有的时候报文非常的大,为节省存储空间,只保留一条流的前 16 个报文。通常一条流的前 16 个报文是和一些协议特征相关数据,后续的报文更多的是承载具体数据内容。报文的删除操作如下:

        local getTcpStream = Field.new("tcp.stream") 
        local getTcpSegmentData = Field.new("tcp.segment_data")  
        local tcpStreamTable = {}--每一条流的索引哈希表  
        local fileDumper = Dumper.new("newCreate.pcap")
        local getTcpLen = Field.new("tcp.len")  
        local pcapNumberCount = {}--每一条流的包数统计
        
        do  
            local function packet_listener()  
                local tap =Listener.new("frame", "frame")  
                --frame是监听器的名称,tcp是Wireshark过滤器规则  
        
                function tap.reset()  
                    --print("tap reset")  
                end  
                
                function tap.packet(pinfo,tvb)  
                    --回调函数,每收到一个包执行一次。  
                    local tcpStream = getTcpStream()  
                    local tcpStreamNumber =tonumber(tostring(tcpStream))  
                    local tcpSegmentData = getTcpSegmentData() 
                    local tcpLen = getTcpLen()
        
                    if(tcpStreamTable[tcpStreamNumber])  
                    then  
                        if(pcapNumberCount[tcpStreamNumber] < 15)
                        then
                            fileDumper:dump_current()
                            if(tcpSegmentData) 
                            then 
                                pcapNumberCount[tcpStreamNumber] = pcapNumberCount[tcpStreamNumber] + 1
                            end
                        end
                    else  
                        --排除ARP等没有流号的报文
                        if(tcpStream ~= nil)
                        then
                            tcpStreamTable[tcpStreamNumber] =tcpStream
                            pcapNumberCount[tcpStreamNumber] = 0
                            fileDumper:dump_current()
                        end
        
                    end  
                end  
        
                function tap.draw()  
                    --结束执行  
                    --print("tap.draw")  
                end  
            end  
               --监听报文  
            packet_listener()  
               --tcpStreamTable =nil  
        end  
    

    有了场景一和的一些介绍,相信对于这个场景的操作也是很容易理解的。即使用pcapNumberCount 对于每条流的报文进行计数,当计数达到要求的时候就不会dump该报文(dump_current)。

    场景三

    场景二说明了如何使用lua脚本对报文进行删除,场景三将讲述如何在一个数据包中增加相应的报文片段。比如一条短流,由于其SDU大于0的包个数较少,需要增加有效载荷的包个数制作测试用例,如下:

    local getTcpStream = Field.new("tcp.stream")
    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 getIpVersion = Field.new("ip.version")
    local getAck = Field.new("tcp.ack")
    local getArrivalTime = Field.new("frame.time_epoch")
    local getTcpLen = Field.new("tcp.len")
    local getTcpHeadLen = Field.new("tcp.hdr_len")
    local tcpStreamTable = {}--每一条流的索引哈希表 
    local dataWriterTable = {}--每一条流的dumper
    
    do
        local function packet_listener()
            local tap = Listener.new("frame", "tcp")
            --frame是监听器的名称,tcp是wireshark过滤器规则  
    
            function tap.reset()
                print("tap reset")
            end
    
            function tap.packet(pinfo,tvb)
                --回调函数,每收到一个包执行一次。 
                local tcpStream = getTcpStream()
                local srcIp = getSrcIp()
                local dstIp = getDstIp()
                local srcPort = getSrcPort()
                local dstPort = getDstPort()
                local ipVersion = getIpVersion()
                local tcpStreamNumber = tonumber(tostring(tcpStream))
                local tcpAck = tonumber(tostring(getAck()))
                local tcpLen = tonumber(tostring(getTcpLen()))
                local tcpHeadLen = tonumber(tostring(getTcpHeadLen()))
                local arrivalTime = tonumber(tostring(getArrivalTime()))
    
                if(tcpStreamTable[tcpStreamNumber])
                then
    
                    dataWriterTable[tcpStreamNumber]:dump_current()
    
                    if(tcpLen > 0)
                    then
                        local seqPos = tvb:len() - tcpLen - tcpHeadLen + 7  --seq最低字节
                        local ackPos = tvb:len() - tcpLen - tcpHeadLen + 11  --seq最低字节
                        bytearray= tvb:bytes(0,tvb:len())
                        bytearray:set_index((seqPos),bytearray:get_index(seqPos)+5)
                        bytearray:set_index((ackPos),bytearray:get_index(ackPos)+5)
                        dataWriterTable[tcpStreamNumber]:dump(arrivalTime,PseudoHeader.eth(0),bytearray)
                        --dataWriterTable[tcpStreamNumber]:dump_current()
                    end
    
                else
                    --排除ARP等没有流号的报文
                    if(tcpStream ~= nil)
                    then
                        local packetTuple4 = tostring(tcpStream).."_"..tostring(srcIp).."_"..tostring(srcPort).."_"..tostring(dstIp).."_"..tostring(dstPort).."_"..tostring(ipVersion)..".pcap"
                        tcpStreamTable[tcpStreamNumber] = tcpStream
                        dataWriterTable[tcpStreamNumber] = Dumper.new(packetTuple4)
                        dataWriterTable[tcpStreamNumber]:dump_current() 
                    end
                    --print(type(tcpStreamTable[tcpStreamNumber]),type(tcpStreamNumber),type(dataWriterTable[tcpStreamNumber]),type(tcpStreamTable))
                end
            end
    
            function tap.draw()
                --结束执行  
                print("tap draw")
                --os.rename(oldPcapName,newPcapName)
    
            end
        end
        --监听报文  
        packet_listener()
        --tcpStreamTable =nil
    end
    

    有一个问题需要注意的就是如果只是简单的复制报文,append到对应报文片之后,会被wireshark检测为tcp重传报文。由于重传报文在有的系统中是会被忽略掉的,因此需要对复制后的报文片段相应的seq和ack做修改,即对seqPos、ackPos做修改 。这个时候wireshark提示变成找不到对应的ack(即乱序),符合系统的要求,如图2:
    在这里插入图片描述
    图2

    应该说该场景中和场景一以及场景二用到的类是一样的,不同的就是类中不同函数的调用。当然这里面仅仅是生成一些测试报文,如果需要让wireshark不提示为乱序的报文,则需要更为复杂的操作。

    通过介绍上述的三个场景,实现了使用 Lua API 编写相应的 Wireshark 插件,完成了处理 PCAP 报文的增删改方面。关于 Wireshark Lua 插件批量修改报文的一些应用场景就给大家介绍到这里,希望对你有所帮助。

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

    展开全文
  • 中国电信短信网关协议SMGP wireshark插件
  • wireshark插件开发 - 自定义协议 wireshark插件开发 - Lua插件解析 wireshark插件开发 - C插件解析 wireshark插件开发 -更多 转载于:https://www.cnblogs.com/99code/p/7531265.html...
    展开全文
  • wireshark插件开发 - 自定义协议     wireshark插件开发 - Lua插件解析     wireshark插件开发 - C插件解析     wireshark插件开发 - 更多
    展开全文
  • 中国移动短信网关协议CMPPv2 wireshark插件
  • 想要开发wireshark插件,我们可以使用C语言也可以使用Lua语言。如下图,是使用两种语言开发插件的对比。 如上图,我最后选择使用Lua语言进行开发wireshark插件。 二、插件功能 目前我有一个任务,需要解析RTP包的...
  • wireshark插件开发完整解决方案(搭建环境+源代码编写)
  • Wireshark插件可与Windows事件跟踪一起使用 Microsoft Message Analyzer即将退休,其下载包已于2019年11月25日从microsoft.com网站上删除。Wireshark已建立了庞大的网络协议解剖器库。 Windows的最佳工具是可以收集...
  • 断断续续的再看wireshark插件和wireshark解析器的代码。 今天做了实验, 如何在wireshark代码上新增一个wireshark插件。 有时做实验,该看的文档都看完了,感觉还不对,墨墨迹迹的不想动手,只能在心里琢磨,也不...
  • 编写DLL格式的wireshark插件

    千次阅读 2015-12-16 11:32:04
    编写DLL格式的wireshark插件在windows环境下,编写wireshark插件,插件格式为dll编写过程总结: 首先,需要按照参考文档1,搭建环境。 然后,按照参考文档2,编写插件。 最后,如果在开发中遇到问题,可以参考...
  • wireshark 插件编写

    2013-08-19 16:58:54
    wireshark插件编写 所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用...
  • 用lua语言编写Wireshark插件解析自定义协议
  • lua语言学习之自定义wireshark插件来解析自定义协议关于wireshark这个抓包工具关于lua使用lua写wireshark插件wireshark接口文档如何在wireshark使用自己写的lua脚本检查是否可以运行lua导入脚本使用教程及完整代码 ...
  • lightning-dissector:WIP:wireshark插件,用于分析闪电网络节点之间的通信
  • Asterix是命令行实用程序和Wireshark插件,用于从标准输入,文件或网络多播流中读取和解析Eurocontrol ASTERIX协议数据。 ASTERIX代表“通用结构化的Eurocontrol监控信息交换”。 它是一种ATM监视数据二进制消息格式...
  • wireshark插件omci.lua

    2018-09-20 16:05:46
    添加插件wireshark可以解析OMCI的报文,过滤条件直接使用OMCI即可过滤。
  • DTN BPv7 / TCPCLv4 Wireshark解剖器 这些wireshark模块需要wireshark本身,cmake和某些构建工具的开发环境。下面的参考命令使用Ninja构建工具,但这不是必需的。 可以使用类似于以下内容的命令序列来构建wireshark...
  • wireshark支持C语言和Lua语言开发插件,本部分内先介绍Lua插件部分开发。Lua语言相对C语言开发有一个巨大的优势,就是不需要编译代码,因为Lua语言是脚本语言,只需要编写相关协议解析的脚本内容,然后由wireshark...
  • 前言 上一个试验在wireshark中新增了一个可以...wireshark插件的使用路数:自己分析解析器回调函数带进来的数据,然后用wireshark插件提供的API,向wireshark UI上设置分析的结果。 试验 // @file packet-foo.c...
  • Wireshark插件开发实例

    2011-05-22 22:40:18
    该范例帮助wireshark使用者根据所需要的协议编写插件进行网络数据分析
  • 作为一个新的协议,wireshark并没有支持openflow,为了提高调试效率,更好的分析协议报文,一个openflow的wireshark插件是必不可少的。同时作为一个开源项目,openflow除了斯坦福大学在发布之初提供的1.0版本的开源...
  • ScoreBoard协议及其Wireshark插件 下一代网络及软交换原理 作业2 5050369043 石君霄 2008-11-27 ~ 2008-11-28 ScoreBoard协议 ScoreBoard协议用于更新比分牌的数值的背景颜色 服务端监听UDP1127端口,客户端...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,008
精华内容 2,003
关键字:

wireshark插件