Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wireshark解析器:IP解析器无法识别我的协议_Wireshark_Wireshark Dissector - Fatal编程技术网

Wireshark解析器:IP解析器无法识别我的协议

Wireshark解析器:IP解析器无法识别我的协议,wireshark,wireshark-dissector,Wireshark,Wireshark Dissector,我正在开发一个解析器/协议作为网络层之上的插件,这样IP解析器将解析所有IP头,并查看“协议”字段以将有效负载传递给我的协议。 假设协议编号为“254” 为了让IP解析器将有效负载传递给我的协议,需要执行哪些步骤 编辑: 我的数据包临时文件包含: #include "config.h" #include <epan/packet.h> #define IP_PROTO_TEMP 254 static int proto_temp = -1; static void diss

我正在开发一个解析器/协议作为网络层之上的插件,这样IP解析器将解析所有IP头,并查看“协议”字段以将有效负载传递给我的协议。
假设协议编号为“254”

为了让IP解析器将有效负载传递给我的协议,需要执行哪些步骤

编辑:

我的数据包临时文件包含:

#include "config.h"

#include <epan/packet.h>


#define IP_PROTO_TEMP 254
static int proto_temp = -1;


static void dissect_temp(tvbuff_t *tvb, packet_info *pinfo, proto_tree     *tree)
{
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "TEMP");
    /* Clear out stuff in the info column */
    col_clear(pinfo->cinfo, COL_INFO);
 }

 void proto_register_temp(void)
 {
     proto_temp = proto_register_protocol (
               "TEMP Protocol", /* name       */
               "TEMP",      /* short name */
               "temp"       /* abbrev     */
               );
  }



 void proto_reg_handoff_temp(void)
{
     static dissector_handle_t temp_handle;

     temp_handle = create_dissector_handle(dissect_temp, proto_temp);
     dissector_add_uint("ip.proto", IP_PROTO_TEMP , temp_handle);
}
#包括“config.h”
#包括
#定义IP_协议_临时254
静态int proto_temp=-1;
静态空洞剖析温度(tvbuff\u t*tvb、数据包信息*pinfo、原型树*tree)
{
col_set_str(pinfo->cinfo,col_协议,“TEMP”);
/*清除信息栏中的内容*/
列清除(pinfo->cinfo,列信息);
}
无效原始寄存器温度(无效)
{
proto_temp=proto_寄存器协议(
“临时协议”、/*名称*/
“TEMP”、/*短名称*/
“临时”/*缩写*/
);
}
作废协议登记移交临时文件(作废)
{
静态剖析器手柄温度手柄;
temp_handle=创建剖析器(dissect_temp,proto_temp);
解剖器添加单元(“ip.proto”,ip-proto-TEMP,TEMP-handle);
}
我在>C:\Development\wireshark\plugins\temp文件夹中有这个文件,因为我是作为插件编写的


谢谢。

让您的剖析器在
“ip.proto”
剖析器表中注册,以254作为键,例如:

proto_my_protocol = proto_register_protocol("My Protocol", "MYP", "myp");
my_handle = new_create_dissector_handle(dissect_my_protocol, proto_my_protocol);
dissector_add_uint("ip.proto", 254, my_handle);

(您可能已经在执行上面的一些操作,例如
proto\u register\u protocol()
调用)。如果您的解析器不是一个“新型”协议,请使用一个额外的“数据”参数并返回一个
int
,使用
create\u dissector\u handle()
,而不是
new\u create\u dissector\u handle()

谢谢@GuyHarris的回复。我仍然无法注册协议。我看到了ipproto.c文件,但在文件中看不到我的协议号(254)。当我把我的剖析器作为一个插件来写的时候,它不会影响对吧?先生,我已经附加了问题中的packet temp.c文件。请看一下,告诉我哪里错了?谢谢。你认为“ip.proto”拼写为“ip.port”是错误的修复该错误,即使用
dissector\u add\u uint(“ip.proto”,ip\u proto\u TEMP,TEMP\u handle)
解析器添加单元(“ip.port”、ip协议、临时句柄)“我看到了ipproto.c文件,但在文件中看不到我的协议号(254)。”它不一定在那里;例如,Wireshark允许您添加在IP上运行的新协议,而无需修改Wireshark源本身。添加它只会改变IPv4和IPv6解析器显示协议/下一个标头字段的方式。