Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Udp 在解剖器中更改wireshark首选项?_Udp_Preferences_Wireshark_Wireshark Dissector - Fatal编程技术网

Udp 在解剖器中更改wireshark首选项?

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

我正在为C语言中的Wireshark创建一个解析器,用于UDP之上的协议。由于我使用的是启发式解析,但存在另一个协议,该协议具有与我相同的端口的标准解析程序,因此我的数据包被解析为另一个协议。为了让我的解析器工作,我需要启用“try heuristic dissectors first”UDP首选项,但我希望在注册插件(在代码中)时更改该属性,因此用户不需要手动更改它。 我注意到在epan/prefs.h上,函数prefs\u set\u pref存在!但当我在插件上使用它时,Wireshark在启动时崩溃,出现总线错误10。 我想做的事可能/正确吗

所以我试过这个:

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,它成功了。:)