我正在为一个没有hton
数据的协议编写一个 Wireshark 解析器插件,我需要在不进行任何字节序转换的情况下提取一个 64 位数据值。
是否有tvb_get_ntoh64
Wireshark 库中包含的版本不执行ntoh
?
我正在为一个没有hton
数据的协议编写一个 Wireshark 解析器插件,我需要在不进行任何字节序转换的情况下提取一个 64 位数据值。
是否有tvb_get_ntoh64
Wireshark 库中包含的版本不执行ntoh
?
我找到了自己问题的答案。wireshark 文档 \wireshark\doc\README.developer 解决了这个问题:
不要使用 "tvb_get_ntohs() 或 "tvb_get_ntohl()" 获取 little-endian 值,然后在结果上使用 "g_ntohs()"、"g_htons()"、"g_ntohl()" 或 "g_htonl()" value - 有问题的 g_ 例程在网络字节顺序(big-endian)和主机字节顺序之间转换,而不是little-endian字节顺序;并非所有运行 Wireshark 的机器都是 little-endian,即使 PC 是。使用获取这些值“tvb_get_letohs()”和“tvb_get_letohs()”。
在寻找中tvbuff.h
,我看到还有其他口味:
extern guint16 tvb_get_letohs(tvbuff_t*, const gint offset);
extern guint32 tvb_get_letoh24(tvbuff_t*, const gint offset);
extern guint32 tvb_get_letohl(tvbuff_t*, const gint offset);
extern guint64 tvb_get_letoh64(tvbuff_t*, const gint offset);
发帖以便将来提出此问题的人能够找到答案。