CGO集成wireshark4.2.0动态链接库新错误col_set_cls_time: assertion “not reached“ failed

CGO集成wireshark4.2.0动态链接库新错误col_set_cls_time: assertion "not reached" failed

    • 1.版本环境
    • 2.问题
    • 3.解决过程

1.版本环境

  • wireshark4.2.0
  • golang1.21
  • mac m1 和 ubuntu22

2.问题

在cgo调用wireshark进行协议解析时候遇到错误:

** (PID:73155) 16:21:54.232994 [(none) ERROR] epan/column-utils.c:1570 -- col_set_cls_time(): assertion "not reached" failed
 ** (PID:73155) Aborting on fatal log level exception

3.解决过程

epan/column-utils.c文件的col_set_cls_time函数1570行逻辑如下:

switch (timestamp_get_type()) {
...
...
case TS_NOT_SET:
    /* code is missing for this case, but I don't know which [jmayer20051219] */
    ws_assert_not_reached();
    break;
  }

timestamp_get_type()方法来自wireshark/epan/timestamp.h,说明没有设置timestamp,同文件看到设置方法timestamp_set_type(ts_type),在源码中找一下案例:
tshark.c有涉及到:

timestamp_set_type(TS_RELATIVE);
timestamp_set_precision(TS_PREC_AUTO);
timestamp_set_seconds_type(TS_SECONDS_DEFAULT);

在设定这三个值之后进行了wtap_init操作,因此判断为初始化wireshark组件时候要进行的设置,于是在自定义代码初始化位置加上以上逻辑,再将epan/timestamp.h导入,通过在mac m1和ubuntu22平台测试,均正确。

至此,完成了对wireshark4.2.0的cgo接口对接。

你可能感兴趣的:(golang,wireshark,cgo)