Я пишу диссектор из Wireshark (разновидность C, а не Lua).
У меня есть поля времени, равные uint64
, представляющие наносекунды с эпохи Unix.
Я бы хотел напечатать время в удобочитаемом формате в wireshark.
Я искал документацию, чтобы показать, как это сделать, и нашел только эту связанную с временем функцию proto_tree_add_time
, в https://anonsvn.wireshark.org/wireshark/trunk-1.6/doc/README.developer.
В итоге я пишу вспомогательную функцию, подобную этой:
static void add_pretty_time(tvbuff_t* tvb, proto_tree* body, unsigned field_offset, int field_id)
{
uint64_t raw_time = tvb_get_letoh64(tvb, field_offset);
nstime_t time;
time.secs = raw_time / 1000000000;
time.nsecs = raw_time % 1000000000;
proto_tree_add_time(body, field_id, tvb, field_offset, 8, &time);
}
Есть ли какой-нибудь более изящный способ, предоставляемый Wireshark, чтобы сделать это? Например, FT_UINT64, BASE_DEC в массиве hf_register_info
может указывать, что это поле должно быть проанализировано как uint64 и отображено в десятичном формате. Было бы идеально, если бы в массиве hf_register_info
было что-то вроде FT_EPOCH64, ISO_FORMAT.