2010-05-28 3 views
1

Я пишу плагин Wireshark dissector для протокола, который не hton это данные, и мне нужно извлечь 64-битное значение данных без каких-либо преобразований endian.Плагин Wireshark: есть ли нет-ntoh версия tvb_get_ntoh64?

Есть ли версия tvb_get_ntoh64, включенная в библиотеки Wireshark, которая не делает ntoh?

+0

Не могли бы вы просто «hton» результирующие данные? Это уродливый взломать, но я также не могу понять, почему достойный протокол будет представлять данные в каком-то конкретном конкретном формате байтового байта. – ereOn

+0

Я мог бы, конечно, но предпочел бы, если есть способ обойти это. Согласитесь с вами относительно надежности этого протокола - это то, против чего я выступал, когда был разработан протокол. Увы, я проиграл. –

ответ

2

Я нашел ответ на свой вопрос. В \ Wireshark \ DOC \ README.developer адреса Wireshark документов это:

Не принести мало-младшему значение с помощью "tvb_get_ntohs() или "tvb_get_ntohl()", а затем с помощью " g_ntohs() », "g_htons()", "g_ntohl()", или "g_htonl()" на полученное значение - то g_ подпрограммы в вопросе преобразования между сетевым порядком байтов (большой-Endian) и хост порядок следования байтов, не малоэтажный байт, а не все машины, на которых работает Wireshark little-endian, хотя ПК есть. Извлеките эти значения с помощью «tvb_get_letohs()» и «tvb_get_letohl()».

В поисках в 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); 

проводок так, что люди задают этот вопрос в будущем сможет найти ответ.

Смежные вопросы