Udp 在解剖器中更改wireshark首选项?
我正在为C语言中的Wireshark创建一个解析器,用于UDP之上的协议。由于我使用的是启发式解析,但存在另一个协议,该协议具有与我相同的端口的标准解析程序,因此我的数据包被解析为另一个协议。为了让我的解析器工作,我需要启用“try heuristic dissectors first”UDP首选项,但我希望在注册插件(在代码中)时更改该属性,因此用户不需要手动更改它。 我注意到在epan/prefs.h上,函数prefs\u set\u pref存在!但当我在插件上使用它时,Wireshark在启动时崩溃,出现总线错误10。 我想做的事可能/正确吗 所以我试过这个:Udp 在解剖器中更改wireshark首选项?,udp,preferences,wireshark,wireshark-dissector,Udp,Preferences,Wireshark,Wireshark Dissector,我正在为C语言中的Wireshark创建一个解析器,用于UDP之上的协议。由于我使用的是启发式解析,但存在另一个协议,该协议具有与我相同的端口的标准解析程序,因此我的数据包被解析为另一个协议。为了让我的解析器工作,我需要启用“try heuristic dissectors first”UDP首选项,但我希望在注册插件(在代码中)时更改该属性,因此用户不需要手动更改它。 我注意到在epan/prefs.h上,函数prefs\u set\u pref存在!但当我在插件上使用它时,Wireshark
G\u模块\u导出无效插件\u寄存器(无效){
prefs_set_pref(“udp.try_启发式_first:true”);
//我的原始记录在这里
}
自epan/prefs.h以来:
/*
* Given a string of the form "<pref name>:<pref value>", as might appear
* as an argument to a "-o" option, parse it and set the preference in
* question. Return an indication of whether it succeeded or failed
* in some fashion.
*
* XXX - should supply, for syntax errors, a detailed explanation of
* the syntax error.
*/
WS_DLL_PUBLIC prefs_set_pref_e prefs_set_pref(char *prefarg);
/*
*给定一个字符串,其形式可能为“:”
*作为“-o”选项的参数,解析它并在中设置首选项
*问题。返回它是成功还是失败的指示
*以某种方式。
*
*XXX-对于语法错误,应提供以下内容的详细说明:
*语法错误。
*/
WS_DLL_PUBLIC prefs_set_pref_e prefs_set_pref(char*prefarg);
感谢您致电
prefs\u set\u pref(“udp.try\u heuristic\u first:true”)代码>在测试Wireshark插件中对我有效
好:假设没有其他问题,我想问题是prefs\u set\u pref()
修改传递给它的字符串
如果传递了字符串文本的(地址),代码将尝试修改该文本,这通常是不允许的。我怀疑这就是你的原因
总线错误10
(我必须深入挖掘,看看为什么我在Windows上的测试确实有效)
因此:我建议尝试以下方式:
char foo[] = {"udp.try_heuristic_first:true"};
...
prefs_set_pref(foo);
看看这是否有效;
或者:对本地数组执行文本的strcpy
==============
(先前的原始评论)
一些评论/问题:
G_模块导出
是关于什么的?
现有的Wireshark插件解析器都没有使用此功能。
(请参阅剖析器Wireshark源代码树中插件下的任何剖析器)
插件寄存器函数需要命名为proto\u register\u???
where?
是插件剖析器的名称
所以:我不理解整个G_模块\u导出void插件\u寄存器(void){
&等等
对prefs\u set\u prefs()
的调用应该在proto\u reg\u切换功能中(而不是在proto\u寄存器中)
功能中)
请显示您尝试了什么?@Jatin,请再次检查我的问题,我已经在代码中包含了我所做的。1.G_模块导出
是我的错误,但这似乎对这种情况没有任何影响。proto_寄存器
在我的包-??.c中,我使用了一个带有plugin_寄存器()的plugin.c
有一行:{extern void proto_register_???(void);proto_register_???()}
(wireshark源代码中的插件也是如此)。2.将prefs_set_pref()
更改为proto_regu切换()
,没有什么区别,我在wireshark启动时仍然出现总线错误10。好:假设没有其他问题,我认为问题在于prefs\u set\u pref()修改传递给它的字符串。是的,它通过在字符串中插入“\0”而不是诸如“.”和“:”之类的分隔符,将字符串分成几段。请注意,它将一个char*
,而不是const char*
,作为参数,因此它不承诺不修改其参数。感谢各位,你们说得对,字符串正在修改。我尝试了您的建议@willyo,它成功了。:)