精华内容
下载资源
问答
  • wireshark协议解析插件【LUA】示例

    千次阅读 2016-03-21 10:56:39
    此文章参考: ...这里简单的贴出两份代码,更多详细资料请参考上面文章。 C语言代码: #include #include #include #pragma comment(lib, "ws2_32.lib") #define UDP_PORT_FOO 9877 struct proto_f

    此文章参考:

    http://www.cnblogs.com/zzqcn/p/4840589.html

    这里简单的贴出两份代码,更多详细资料请参考上面文章。

    C语言代码:

    #include <WinSock2.h>
    #include <stdio.h>
    #include <time.h>
    #pragma comment(lib, "ws2_32.lib")
    
    #define  UDP_PORT_FOO  9877
    
    struct proto_foo
    {
        UINT8  type;
        UINT8  flags;
        UINT16 seqno;
        UINT32 ipaddr;
    };
    
    int main(int argc, char** argv)
    {
        int ret;
        SOCKET sockfd;
        SOCKADDR_IN addr;
        proto_foo data;
        INT16 seq = 1;
    
        WORD dwVersion = MAKEWORD(2, 2);
        WSAData wsaData;
        WSAStartup(dwVersion, &wsaData);
    
        sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        addr.sin_family = AF_INET;
        addr.sin_port = htons(UDP_PORT_FOO);
    
        if(argc < 2)
        {
            printf("will send to 220.181.57.217\n");
            addr.sin_addr.s_addr = inet_addr("220.181.57.217");
        }
        else
            addr.sin_addr.s_addr = inet_addr(argv[1]);
    
        data.ipaddr = 0x04030201;
        for(;;)
        {
            srand((unsigned int)time(NULL));
            data.type = rand() % 3 + 1;
            data.flags = rand() % 4 + 1;
            if(data.flags == 3)
                data.flags = 4;
            data.seqno = htons(seq++);
    
            ret = sendto(sockfd, (const char*)&data, sizeof(proto_foo), 0, 
                (SOCKADDR*)&addr, sizeof(addr));
            if(SOCKET_ERROR == ret)
            {
                printf("sendto error\n");
                break;
            }
            Sleep(1000);
        }
        closesocket(sockfd);
        WSACleanup();
    
        return 0;
    }

    LUA插件代码:

    -- @brief Foo Protocol dissector plugin
    -- @author zzq
    -- @date 2015.08.12
    
    -- create a new dissector
    local NAME = "foo"
    local PORT = 9877
    local foo = Proto(NAME, "Foo Protocol")
    
    
    -- dissect packet
    function foo.dissector (tvb, pinfo, tree)
    end
    
    -- register this dissector
    DissectorTable.get("udp.port"):add(PORT, foo)
    
    
    -- create fields of foo
    local fields = foo.fields
    fields.type = ProtoField.uint8 (NAME .. ".type", "Type")
    fields.flags = ProtoField.uint8 (NAME .. ".flags", "Flags")
    fields.seqno = ProtoField.uint16(NAME .. ".seqno", "Seq No.")
    fields.ipaddr = ProtoField.ipv4(NAME .. ".ipaddr", "IPv4 Address")
    
    
    -- dissect packet
    function foo.dissector (tvb, pinfo, tree)
        local subtree = tree:add(foo, tvb())
        local offset = 0
        
        -- show protocol name in protocol column
        pinfo.cols.protocol = foo.name
        
        -- dissect field one by one, and add to protocol tree
        local type = tvb(offset, 1)
        subtree:add(fields.type, type)
        subtree:append_text(", type: " .. type:uint())
        offset = offset + 1
        
        subtree:add(fields.flags, tvb(offset, 1))
        offset = offset + 1
        subtree:add(fields.seqno, tvb(offset, 2))
        offset = offset + 2
        subtree:add(fields.ipaddr, tvb(offset, 4))
    end

    将LUA文件放于wireshark安装目录下的:.\plugins\2.0.2  目录下(版本变动请根据实际情况设置目录)。




    展开全文
  • wireshark自定义协议字段解析

    千次阅读 2020-01-20 20:50:03
    wireshark代码: https://code.wireshark.org/review/#/admin/projects/wireshark wireshark开发指南: ... 添加自定义协议解析器示例: https://www.wireshark.org/docs/wsdg_html_...

    wireshark源代码:

    https://code.wireshark.org/review/#/admin/projects/wireshark

    wireshark开发指南:

    https://www.wireshark.org/docs/wsdg_html_chunked/

    添加自定义协议解析器示例:

    https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.html

    展开全文
  • 其实谈不上解析HJ212协议,这里编写的插件是把HJ212协议识别出来,在wireshark中可以看到协议名称,方便查看。 继续对其解析,可以把datetime,MN,数据段等分别解析出来,值得继续研究。 对于wireshark的lua的使用,...

    文章目录

    前言

    这是学习利用lua为wireshark编写插件的练手作。
    其实谈不上解析HJ212协议,这里编写的插件是把HJ212协议识别出来,在wireshark中可以看到协议名称,方便查看。
    继续对其解析,可以把datetime,MN,数据段等分别解析出来,值得继续研究。

    对于wireshark的lua的使用,包括在wireshark中加载lua脚本,可以参看官网和文章最后的引用。

    代码

    -- 第一个参数协议名称,第二个参数协议描述,在wireshark protocal窗格显示为hj212-2017
    local hj212_proto=Proto("hj212-2017","environment 212 protocal")
    
    ------------------------------------------------------------------------
    -- 各参数的含义可以看参考中的两篇文章
    function hj212_proto.dissector(tvb,pinfo,tree)
    pinfo.cols.protocol = hj212_proto.name
    data_len  = tvb:len()
    local d=tree:add(hj212_proto.name.."-Data")
    d:append_text("("..data_len.." bytes of data)")
    
    -- 
    local data_dis = Dissector.get("data")
    data_dis:call(tvb(0):tvb(), pinfo,d)
    end
    
    
    ---------------------------------------------------------------
    
    local tcp_port_table=DissectorTable.get("tcp.port")
    
    -- 默认10086端口
    tcp_port_table:add(10086,hj212_proto)
    

    参考

    https://blog.csdn.net/qq_40421919/article/details/103516694
    https://blog.csdn.net/wangquan1992/article/details/100161021

    展开全文
  • 上文【调用wireshark(一):初次尝试...本文要给出真正调用wireshark协议解析函数的方法和代码。 本文的讨论和代码基于wireshark 1.8.4版本。 涉及到的函数与数...

     

     

    上文【调用wireshark(一):初次尝试 http://www.cnblogs.com/zzqcn/archive/2013/05/11/3072362.html 】已经介绍了调用wireshark的原理,并给出一个简单示例。本文要给出真正调用wireshark协议解析函数的方法和代码。

    本文的讨论和代码基于wireshark 1.8.4版本。

     

    涉及到的函数与数据结构

    首先我们得知道需要调用哪些函数。通过调试自己编译的wireshark,我发现如果要实现简单的协议解析,主要只需要以下几个函数(源码位置均相对于wireshark源码主目录而言):

    函 数 功 能       源码位置
    epan_init   初始化协议解析库 epan/epan.h
    epan_cleanup 清理协议解析库 同上
    epan_dissect_new 创建协议解析数据结构edt 同上
    epan_dissect_run 执行协议解析 同上
    epan_dissect_free 销毁协议解析数据结构edt 同上
    init_dissection 初始化数据包级协议解析 epan/packet.h
    cleanup_dissection  清理数据包级协议解析  同上

     

    除此之外,还需要导出一些辅助的函数,如register_all_protocols, register_all_protocol_handoffs,proto_item_fill_label等等。

    不仅如此,还需要熟悉协议解析过程所涉及到的一些数据结构,主要有:

    数据结构 功 能       源码位置
    epan_dissect_t   协议解析信息,保存协议数据及协议解析树 epan/epan.h; epan/epan_dissect.h
    field_info 协议字段信息 epan/proto.h
    header_field_info 协议首部字段信息 同上
    proto_tree/proto_node 协议树 同上
    frame_data 单帧(数据包)信息 epan/frame_data.h
    wtap_pseudo_header wtap伪首部,主要是链路层协议信息 wiretap/wtap.h

     

    以上就是一些主要的函数及数据结构。实际的协议解析过程中,可能会涉及到更多的函数及数据结构,这里就不多说了,具体可以查看wireshark源码。如果对于某些函数,或者解析过程有不了解的,也可以自己编译wireshark,然后调试它。

     

    代码实现

    知道原理及所需的函数后,就可以编码实现了。环境的配置等基础知识,本系列前一篇已经讲过了。

    我继续用Win32 Console工程来写这个示例。我这个示例代码分为两个部分:

    一、wireshark导出函数及简单的封装;
    二、实际解析代码

    第一个部分分成wireshark.h和wireshark.cpp两个文件。第二部分为dissector.cpp,其中也包括了main函数。

    wireshark导出函数及简单封装

    没什么好说的,主要就是所需函数的声明,以及动态调用代码。

    wireshark.h:

     1 /*
     2  * wireshark协议解析相关的导出函数声明,以及简单函数封装
     3  *
     4  * Copyright (c) 2013 赵子清, All rights reserved.
     5  *
     6  */
     7 
     8 
     9 #ifndef  __WIRESHARK_H__
    10 #define  __WIRESHARK_H__
    11 
    12 // see \wireshark-1.8.4\CMakeLists.txt, #481
    13 #define WS_VAR_IMPORT       __declspec(dllimport) extern
    14 // see \wireshark-1.8.4\CMakeLists.txt, #482
    15 #define WS_MSVC_NORETURN    __declspec(noreturn)
    16 
    17 #ifdef  TRY
    18 #undef  TRY 
    19 #endif
    20 #ifdef  CATCH
    21 #undef  CATCH
    22 #endif
    23 #ifdef  CATCH_ALL
    24 #undef  CATCH_ALL 
    25 #endif
    26 #ifdef  THROW
    27 #undef  THROW
    28 #endif
    29 
    30 
    31 // wireshark源码头文件
    32 #include "epan/epan.h"
    33 #include "epan/epan_dissect.h"
    34 #include "epan/proto.h"
    35 #include "epan/packet_info.h"
    36 #include "epan/frame_data.h"
    37 #include "epan/packet.h"
    38 #include <Windows.h>
    39 
    40 
    41 #define CHECK(x) if(!(x)) return FALSE;
    42 
    43 
    44 /* \register.h -------------------------------------------------------------------------*/
    45 typedef void (*register_cb) (register_action_e action, const char *message, gpointer client_data);
    46 typedef void (*f_register_all_protocols) (register_cb cb, gpointer client_data);
    47 typedef void (*f_register_all_protocol_handoffs) (register_cb cb, gpointer client_data);
    48 typedef void (*f_register_all_tap_listeners)(void);
    49 /*--------------------------------------------------------------------------------------*/
    50 
    51 /* \epan\packet.h ----------------------------------------------------------------------*/
    52 typedef void (*f_init_dissection) (void);
    53 typedef void (*f_cleanup_dissection) (void);
    54 /*--------------------------------------------------------------------------------------*/
    55 
    56 /* \epan\epan.h -------------------------------------------------------------------------*/
    57 typedef void (*f_epan_init) (void (*register_all_protocols)(register_cb cb, gpointer client_data),
    58                             void (*register_all_handoffs)(register_cb cb, gpointer client_data),
    59                             register_cb cb,
    60                             void *client_data,
    61                             void (*report_failure)(const char *, va_list),
    62                             void (*report_open_failure)(const char *, int, gboolean),
    63                             void (*report_read_failure)(const char *, int));
    64 typedef void (*f_epan_cleanup) (void);
    65 typedef epan_dissect_t* (*f_epan_dissect_new) (gboolean create_proto_tree, 
    66                                             gboolean proto_tree_visible);
    67 typedef void (*f_epan_dissect_run) (epan_dissect_t *edt, void* pseudo_header,
    68                             const guint8* data, frame_data *fd, column_info *cinfo);
    69 typedef void (*f_epan_dissect_free) (epan_dissect_t* edt);
    70 typedef void (*f_epan_dissect_fill_in_columns) (epan_dissect_t *edt);
    71 /*--------------------------------------------------------------------------------------*/
    72 
    73 /* \epan\proto.h -----------------------------------------------------------------------*/
    74 typedef void (*f_proto_item_fill_label) (field_info *fi, gchar *label_str);
    75 /*--------------------------------------------------------------------------------------*/
    76 
    77 extern f_epan_init                            ws_epan_init;
    78 extern f_epan_cleanup                        ws_epan_cleanup;
    79 extern f_register_all_protocols                ws_register_all_protocols;
    80 extern f_register_all_protocol_handoffs        ws_register_all_protocol_handoffs;
    81 extern f_init_dissection                    ws_init_dissection;
    82 extern f_cleanup_dissection                    ws_cleanup_dissection;
    83 extern f_epan_dissect_new                    ws_epan_dissect_new;
    84 extern f_epan_dissect_run                    ws_epan_dissect_run;
    85 extern f_epan_dissect_free                    ws_epan_dissect_free;
    86 extern f_proto_item_fill_label                ws_proto_item_fill_label;
    87 
    88 
    89 HINSTANCE  LoadWiresharkDLL(const TCHAR* szDLLPath);
    90 BOOL  FreeWiresharkDLL(HMODULE hModule);
    91 BOOL  GetWiresharkFunctions(HMODULE hDLL);
    92 
    93 #endif /* WIRESHARK_H_ */


    wireshark.cpp:

     1 /*
     2 * wireshark协议解析相关的导出函数声明,以及简单的函数封装
     3 *
     4 * Copyright (c) 2013 赵子清, All rights reserved.
     5 *
     6 */
     7 
     8 
     9 #include "wireshark.h"
    10 
    11 f_epan_init                                ws_epan_init;
    12 f_epan_cleanup                            ws_epan_cleanup;
    13 f_register_all_protocols                ws_register_all_protocols;
    14 f_register_all_protocol_handoffs        ws_register_all_protocol_handoffs;
    15 f_init_dissection                        ws_init_dissection;
    16 f_cleanup_dissection                    ws_cleanup_dissection;
    17 f_epan_dissect_new                        ws_epan_dissect_new;
    18 f_epan_dissect_run                        ws_epan_dissect_run;
    19 f_epan_dissect_free                        ws_epan_dissect_free;
    20 f_proto_item_fill_label                    ws_proto_item_fill_label;
    21 
    22 HINSTANCE  LoadWiresharkDLL(const TCHAR* szDLLPath)
    23 {
    24     return ::LoadLibrary(szDLLPath);
    25 }
    26 
    27 BOOL  FreeWiresharkDLL(HMODULE hModule)
    28 {
    29     return ::FreeLibrary(hModule);
    30 }
    31 
    32 BOOL  GetWiresharkFunctions(HMODULE hDLL)
    33 {
    34     CHECK(ws_epan_init = (f_epan_init)::GetProcAddress(hDLL, "epan_init"));
    35     CHECK(ws_epan_cleanup = (f_epan_cleanup)::GetProcAddress(hDLL, "epan_cleanup"));
    36     CHECK(ws_register_all_protocols = (f_register_all_protocols)
    37                     ::GetProcAddress(hDLL, "register_all_protocols"));
    38     CHECK(ws_register_all_protocol_handoffs = (f_register_all_protocol_handoffs)
    39                     ::GetProcAddress(hDLL, "register_all_protocol_handoffs"));
    40     CHECK(ws_init_dissection = (f_init_dissection)::GetProcAddress(hDLL, "init_dissection"));
    41     CHECK(ws_cleanup_dissection = (f_cleanup_dissection)::GetProcAddress(hDLL, "cleanup_dissection"));
    42     CHECK(ws_epan_dissect_new = (f_epan_dissect_new)::GetProcAddress(hDLL, "epan_dissect_new"));
    43     CHECK(ws_epan_dissect_run = (f_epan_dissect_run)::GetProcAddress(hDLL, "epan_dissect_run"));
    44     CHECK(ws_epan_dissect_free = (f_epan_dissect_free)::GetProcAddress(hDLL, "epan_dissect_free"));
    45     CHECK(ws_proto_item_fill_label = (f_proto_item_fill_label)::GetProcAddress(hDLL, "proto_item_fill_label"));
    46 
    47     return TRUE;
    48 }

    实际解析代码

    以下代码调用wireshark协议解析库,解析了一段数据。这段数据,如注释里所说,是我上网时随便用wireshark抓的。解析完成后,把结果输出到控制台。

    主要的流程是:

    动态调用所需的wireshark函数 -> 初始化协议解析库 -> 解析数据 -> 将解析结果按协议层次输出到控制台 -> 清理协议解析库。

    解析的结果主要是一个树形结构,因为我写了一个递归函数print_tree来遍历此树。

      1 /*
      2  * 调用wireshark解析库完成数据解析
      3  *
      4  * Copyright (c) 2013 赵子清, All rights reserved.
      5  *
      6  */
      7 
      8 #include "wireshark.h"
      9 #include <stdio.h>
     10 #include <tchar.h>
     11 
     12 #define DATA_LEN 73
     13 #define WIRESHARK_DLL_PATH  _T("E:\\dev\\wireshark-1.8.4\\release\\libwireshark.dll")
     14 
     15 // 帧数据, 不包括PCAP文件头和帧头
     16 // 数据为ethernet - ipv4 - udp - DNS, 上网时随便捕获的.
     17 const guchar data[DATA_LEN] = 
     18 {
     19 0x7E, 0x6D, 0x20, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00,
     20 0x00, 0x3B, 0x5F, 0x15, 0x00, 0x00, 0x40, 0x11, 0xF1, 0x51, 0x73, 0xAB, 0x4F, 0x08, 0xDB, 0x8D,
     21 0x8C, 0x0A, 0x9B, 0x90, 0x00, 0x35, 0x00, 0x27, 0xEF, 0x4D, 0x43, 0x07, 0x01, 0x00, 0x00, 0x01,
     22 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x74, 0x04, 0x73, 0x69, 0x6E, 0x61, 0x03, 0x63, 0x6F,
     23 0x6D, 0x02, 0x63, 0x6E, 0x00, 0x00, 0x01, 0x00, 0x01
     24 };
     25 
     26 
     27 void print_tree(proto_tree* tree, int level)
     28 {
     29     if(tree == NULL)
     30         return;
     31 
     32     for(int i=0; i<level; ++i)
     33         printf("    ");
     34 
     35     gchar field_str[ITEM_LABEL_LENGTH + 1] = {0};
     36     if(tree->finfo->rep == NULL)
     37         ws_proto_item_fill_label(tree->finfo, field_str);
     38     else
     39         strcpy_s(field_str, tree->finfo->rep->representation);
     40 
     41     if(!PROTO_ITEM_IS_HIDDEN(tree))
     42         printf("%s\n", field_str);   
     43 
     44     print_tree(tree->first_child, level+1);
     45     print_tree(tree->next, level);
     46 }
     47 
     48 void try_dissect()
     49 {
     50     frame_data  *fdata;
     51     epan_dissect_t  *edt;
     52     union wtap_pseudo_header  pseudo_header;
     53     pseudo_header.eth.fcs_len = -1;
     54 
     55     fdata = (frame_data*)g_new(frame_data, 1);
     56 
     57     memset(fdata, 0, sizeof(frame_data));
     58     fdata->pfd  = NULL;
     59     fdata->num = 1;
     60     fdata->interface_id = 0;
     61     fdata->pkt_len  = DATA_LEN;
     62     fdata->cap_len  = DATA_LEN;
     63     fdata->cum_bytes = 0;
     64     fdata->file_off = 0;
     65     fdata->subnum = 0;
     66     fdata->lnk_t = WTAP_ENCAP_ETHERNET;
     67     fdata->flags.encoding = PACKET_CHAR_ENC_CHAR_ASCII;
     68     fdata->flags.visited = 0;
     69     fdata->flags.marked = 0;
     70     fdata->flags.ref_time = 0;
     71     fdata->color_filter = NULL;
     72     fdata->abs_ts.secs = 0;
     73     fdata->abs_ts.nsecs = 0;
     74     fdata->opt_comment = NULL;
     75     
     76     edt = ws_epan_dissect_new(TRUE, TRUE);
     77     ws_epan_dissect_run(edt, &pseudo_header, data, fdata, NULL);
     78     print_tree(edt->tree->first_child, 0);
     79     ws_epan_dissect_free(edt);
     80     g_free(fdata);
     81 }
     82 
     83 
     84 int main(int argc, char** argv)
     85 {
     86     HINSTANCE hDLL = NULL;
     87     BOOL ret = FALSE;
     88     void* addr = NULL;
     89 
     90     hDLL = LoadWiresharkDLL(WIRESHARK_DLL_PATH);
     91     if(hDLL)
     92     {
     93         ret = GetWiresharkFunctions(hDLL);
     94         if(ret)
     95         {
     96             ws_epan_init(ws_register_all_protocols, ws_register_all_protocol_handoffs, 
     97                             NULL, NULL, NULL, NULL, NULL);
     98             ws_init_dissection();
     99             try_dissect();
    100             ws_cleanup_dissection();
    101             ws_epan_cleanup();
    102         }
    103         else
    104             fprintf(stderr, "某些导出函数获取失败!\n");
    105         FreeWiresharkDLL(hDLL);
    106     }
    107     else
    108         fprintf(stderr, "无法加载DLL!\n");
    109     
    110 
    111     system("PAUSE");
    112     return 0;
    113 }

     

     解析结果

     编译运行以上代码,控制台输出的解析结果如下:

    Frame 1: 73 bytes on wire (584 bits), 73 bytes captured (584 bits)
        WTAP_ENCAP: 1
        Frame Number: 1
        Frame Length: 73 bytes (584 bits)
        Capture Length: 73 bytes (584 bits)
        Frame is marked: False
        Frame is ignored: False
        Protocols in frame: eth:ip:udp:dns
    Ethernet II, Src: 01:00:01:00:00:00 (01:00:01:00:00:00), Dst: 7e:6d:20:00:01:00 (7e:6d:20:00:01:00)
        Destination: 7e:6d:20:00:01:00 (7e:6d:20:00:01:00)
            Address: 7e:6d:20:00:01:00 (7e:6d:20:00:01:00)
            .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
            .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        Source: 01:00:01:00:00:00 (01:00:01:00:00:00)
            Expert Info (Warn/Protocol): Source MAC must not be a group address: IEEE 802.3-2002, Section 3.2.3(b)
                Message: Source MAC must not be a group address: IEEE 802.3-2002, Section 3.2.3(b)
                Severity level: Warn
                Group: Protocol
            Address: 01:00:01:00:00:00 (01:00:01:00:00:00)
            .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
            .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
        Type: IP (0x0800)
    Internet Protocol Version 4, Src: 115.171.79.8 (115.171.79.8), Dst: 219.141.140.10 (219.141.140.10)
        Version: 4
        Header length: 20 bytes
        Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
            0000 00.. = Differentiated Services Codepoint: Default (0x00)
            .... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
        Total Length: 59
        Identification: 0x5f15 (24341)
        Flags: 0x00
            0... .... = Reserved bit: Not set
            .0.. .... = Don't fragment: Not set
            ..0. .... = More fragments: Not set
        Fragment offset: 0
        Time to live: 64
        Protocol: UDP (17)
        Header checksum: 0xf151 [correct]
            Good: True
            Bad: False
        Source: 115.171.79.8 (115.171.79.8)
                    Destination: 219.141.140.10 (219.141.140.10)
                    Source GeoIP: Unknown
        Destination GeoIP: Unknown
    User Datagram Protocol, Src Port: 39824 (39824), Dst Port: 53 (53)
        Source port: 39824 (39824)
        Destination port: 53 (53)
                Length: 39
            Checksum: 0xef4d [validation disabled]
            Good Checksum: False
            Bad Checksum: False
    Domain Name System (query)
        Transaction ID: 0x4307
        Flags: 0x0100 Standard query
            0... .... .... .... = Response: Message is a query
            .000 0... .... .... = Opcode: Standard query (0)
            .... ..0. .... .... = Truncated: Message is not truncated
            .... ...1 .... .... = Recursion desired: Do query recursively
            .... .... .0.. .... = Z: reserved (0)
            .... .... ...0 .... = Non-authenticated data: Unacceptable
        Questions: 1
        Answer RRs: 0
        Authority RRs: 0
        Additional RRs: 0
        Queries
            t.sina.com.cn: type A, class IN
                Name: t.sina.com.cn
                Type: A (Host address)
                Class: IN (0x0001)


    我们当然也可以在自己的GUI界面上,使用TreeCtrl来把解析结果显示给用户,就像下面这样(我写的工具的截图):

     

    转载于:https://www.cnblogs.com/zzqcn/archive/2013/05/11/3072909.html

    展开全文
  • 还不知道如何解析不固定长度的字段 还不知道一个数据被分在多个TCP包里的情况如何处理 代码 local hj212_proto=Proto("hj212-2017","environment 212 protocal") local fields = hj212_proto.fields fields.qn = ...
  • java实现FTP协议:wireshark抓包解析

    千次阅读 2020-02-20 17:22:57
    本节我们看看ftp协议的数据包格式,同时使用代码加以实现。首先我们现在机器上安装ftp服务器,我在自己的机器上安装了QuickFTP Server,它是我随便找来的一款Mac ftp服务器,如下图所示,我将连接端口设置为2100,...
  • lua语言学习之自定义wireshark插件来解析自定义协议关于wireshark这个抓包工具关于lua使用lua写wireshark插件wireshark接口文档如何在wireshark使用自己写的lua脚本检查是否可以运行lua导入脚本使用教程及完整代码 ...
  • SRT协议Wireshark解析器编写(Lua)

    千次阅读 2019-08-17 17:19:44
    WireSharks插件编写(lua)前言APIProtoProtoField满足按位显示的例子(同时满足字符串查找)TvbTvbRangePinfoTreeItem实现协议里面添加子树例子DissectorTable代码部分大致框架完善完善字段完善解析函数关于标志位...
  • wireshark代码的一些分析

    千次阅读 2012-04-20 14:22:04
    最近一段时间一直在看wireshark的源代码,没办法,项目需要嘛。这里写了一些wireshark代码的分析,比较粗浅也比较混乱。 epan/dissector/packet-XXX.c ...在协议解析中使用到的函数有三个变量, tvbuff
  • 在用wireshark lua编写自己的协议解析器dissector时,是可以在包字节面板(Packet Bytes pane)上加入自己的tab的,就像HTTP跨越多个TCP包时,会加上一个Reassembled TCP面板到字节面板里,用于显示整个完整的HTTP...
  • 最近在弄wireshark,网上资料很少,不过找到了一篇不错的,翻译过来,方便大家查看。不过设置编译环境那章写的不怎么好,可以参考下官网或其他人写的经验贴。   原文地址:...
  • Wireshark是一款开源软件,学习其源代码协议解析具有很大的帮助。
  • 参考资料【wireshark 使用lua解析自定义包】 例子代码如下: do --创建一个新的协议结构 local wesley_proto= Proto("WESLEY", "Wesely Protocol") --下面定义字段,其中w
  • WireShark支持编程开发接口 也就是你可以添加更多新的功能 使用的编程语言就是Lua 结果弹出了一个对话窗口 名字叫hello world ...代码为 第一行最右边是对协议的描述,随便写 第二行固定 第三行第一个括号
  • 今天我们又来讲讲邮件协议,如果您曾经设置过电子邮件帐户,则可能会询问您要使用哪种电子邮件协议(POP或IMAP),对于POP,我们在这篇文章上有讲解《pop3协议解析代码实现》。当我们所做的选择那种电子件协议,将...
  • Lua语言相对C语言开发有一个巨大的优势,就是不需要编译代码,因为Lua语言是脚本语言,只需要编写相关协议解析的脚本内容,然后由wireshark加载即可(Wireshark自带Lua解析器),wireshark封装丰富的接口给Lua使用,...
  • Asterix是命令行实用程序和Wireshark插件,用于从标准输入,文件或网络多播流中读取和解析Eurocontrol ASTERIX协议数据。 ASTERIX代表“通用结构化的Eurocontrol监控信息交换”。 它是一种ATM监视数据二进制消息格式...
  • wireshark源码

    热门讨论 2012-06-10 21:43:51
    现在进入下一步,添加一些协议解析功能。在这一步我们需要构建一组帮助解析的表结构。这需要对"proto_register_rdp"函数做些修改。首先定义一组静态数组。 例5 定义数据结构 static hf_register_info hf[]= { { &hf;...
  • 我的lua代码如下所示,打开wireshar直接死掉。。希望大家忙我看看哪里有问题,谢谢。 do --[[ 创建一个新的协议结构 foo_proto 第一个参数是协议名称会体现在过滤器中 第二个参数是协议的描述信息,无关紧要 -...
  • ARP协议数据包的分析ARP也就是地址解析协议,我们要访问外网,不知道对方的mac地址就需要arp来进行请求然后知道后就可以请求网关来进行通信。复制代码 地址解析协议,即ARP(Address Resolution Protocol),是根据...
  • WIRESHARK-常见协议包数据包的分层结构arpicmptcp-三次握手udpdnshttpftp例:arp第一层包的相关信息。... 硬件地址类型1表示以太网 协议类型ip解析成arp地址 硬件地址长度 ip地址4字节32位 操作代码...
  • 本节,我们使用代码实现主机配置协议。对协议实现而言,一是要理解数据包的交互流程,二是要了解数据包的结构,因此我们首先抓取DHCP协议的数据包,先了解它的大致结构。 首先启动wireshark,然后输入过滤条件为:...
  • Wireshark Lua插件学习心得

    千次阅读 2015-06-28 17:50:56
    重新学习了一下前一段时间依葫芦画瓢写的解析asn.1的骨干的Wireshark lua插件的代码,突然发现自己貌似理解了Wireshark解析的基本思想:把一段码流划分成若干个小段,每个段取个名字,并描述一下这个段如何翻译,...
  • 同时wireshark作为一个开源项目,来自全世界的开发者不断的优化wireshark,不断的增多其支持的协议数量和解析能力。既然是一个开源项目,我们自然是可以改造其代码,来满足我们定制化的需求。作为一款较偏底层的应用...
  • wireshark是一个巨大的宝库:通过研究它的协议解析代码,我们可以加深对协议的理解;通过调用它的导出函数,我们可以在自己的程序中添加协议解析、协议过滤等功能。 这一系列文章就将一步步介绍在Windows平台上...
  • wireshark lua脚本

    2016-12-04 15:42:00
    1、目的:解析rssp2协议 2、如何使用wireshark lua插件  将编写的(假设为rssp2.lua)lua文本,放入wireshark 安装目录下,放哪里都行只要dofile添加了路径. 并且在安装目录下找到init.lua,最后一行添加路径...
  • 最近项目开发需要,数据转发组同事写了一个lua插件,来解析mac in mac的内部协议上送的报文,在老的wireshark中使用是没有问题的,但是在新的wireshark版本中,解析到内层mac时就挂,看了下lua脚本,定位出是二层mac...
  • Lua for wireshark

    千次阅读 2010-06-26 21:13:00
    按照自己的方式解析dns协议 --由于wireshark提供的help不是很详细,而且自己也没有用c对wireshark进行dissector的编写,开始比较困难,逐步总结出了一个框架 --基本的程序框架: --mydns do...

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

wireshark协议解析代码