Еще раз здравствуйте!!!Возникла необходимость в использовании функции libnet_build_icmpv4_timestamp из библиотеки libnet. Вот ее прототип:
libnet_build_icmpv4_timestamp ( u_int8_t type,
u_int8_t code,
u_int16_t sum,
u_int16_t id,
u_int16_t seq,
n_time otime,
n_time rtime,
n_time ttime,
u_int8_t * payload,
u_int32_t payload_s,
libnet_t * l,
libnet_ptag_t ptag
)Ни как не могу понять, что за тип такой n_time??? Искал где только мог, но ничего про него не нашел. Из описания протокола видно, что под временную метку отводится 4 байта. При помощи какой функции можно получить метку системного времени для отправки ее в icmp сообщении данного типа?
Заранее спасибо!
> Ни как не могу понять, что за тип такой n_time??? Искал где
> только мог, но ничего про него не нашел. Из описания протокола
> видно, что под временную метку отводится 4 байта. При помощи какой
> функции можно получить метку системного времени для отправки ее в icmp
> сообщении данного типа?Плохо искали)
это UTC время в миллисекундах от начала суток в сетевом порядке, соответственно:
n_time
getntime(void)
{
struct timespec ts;
u_long t;clock_gettime(CLOCK_REALTIME, &ts);
t = (ts.tv_sec % (24*60*60)) * 1000 + ts.tv_nsec / 1000000;
return (htonl(t));
}
Искал я может и плохо, но в google нет ничего по запросу n_time. Как там еще искать, я уж не знаю)За разъяснение спасибо, только вот не совсем ясен смысл следующих действий:
(ts.tv_sec % (24*60*60)) * 1000 + ts.tv_nsec / 1000000
Если первое поле структуры содержит в себе число секунд, а второе - наносекунд, то напрашивается следующий вариант:
ts.tv_sec * 1000 + ts.tv_nsec * 1000000
Не могли бы Вы разъяснить данный момент?
> (ts.tv_sec % (24*60*60)) * 1000 + ts.tv_nsec / 1000000
> ts.tv_sec * 1000 + ts.tv_nsec * 1000000
> Не могли бы Вы разъяснить данный момент?Можно я, спасибо: "от начала суток".
Все, понял. Спаибо
>[оверквотинг удален]
> n_time otime,
> n_time rtime,
> n_time ttime,
> u_int8_t * payload,
> u_int32_t payload_s,
> libnet_t * l,
> libnet_ptag_t ptag
> )
> Ни как не могу понять, что за тип такой n_time??? Искал где
> только мог, но ничего про него не нашел.# grep " n_time" /usr/include/ -R
/usr/include/netinet/in_systm.h:typedef u_int32_t n_time; /* ms since 00:00 GMT, byte rev */
#ifndef _NETINET_IN_SYSTM_H
#define _NETINET_IN_SYSTM_H 1#include <sys/cdefs.h>
#include <sys/types.h>__BEGIN_DECLS
/*
* Network order versions of various data types. Unfortunately, BSD
* assumes specific sizes for shorts (16 bit) and longs (32 bit) which
* don't hold in general. As a consequence, the network order versions
* may not reflect the actual size of the native data types.
*/typedef u_int16_t n_short; /* short as received from the net */
typedef u_int32_t n_long; /* long as received from the net */
typedef u_int32_t n_time; /* ms since 00:00 GMT, byte rev */__END_DECLS
#endif /* netinet/in_systm.h */
Большое спасибо, pavlinux! Как всегда, в точку!)