печать порядкового номера прослушанного пакета
-
20-09-2019 - |
Вопрос
я использую pcap для создания анализатора пакетов.
у меня есть эта структура TCP:
typedef struct TSP_header{
unsigned short int sport;
unsigned short int dport;
unsigned int seqnum;
unsigned int acknum;
unsigned char reserved:4, offset:4;
unsigned int
tcp_res1:4, //little-endian
tcph_hlen:4, //length of tcp header in 32-bit words
tcph_fin:1, //Finish flag "fin"
tcph_syn:1, //Synchronize sequence numbers to start a connection
tcph_rst:1, //Reset flag
tcph_psh:1, //Push, sends data to the application
tcph_ack:1, //acknowledge
tcph_urg:1, //urgent pointer
tcph_res2:2;
unsigned short int tcph_win;
unsigned short int tcph_chksum;
unsigned short int tcph_urgptr;
}TSP_header;
как мне распечатать порядковый номер?
мне следует использовать htons(sequence_number)??потому что это так не работает!!
другой мой вопрос: какое число после объявления переменной?
что означает 4 в tcph_hlen:4
Решение
Если языком программирования является C, обратите внимание, что ваша структура неверна, поскольку вы не указываете размеры полей.Например, порядковый номер составляет 32 бита, а «int» может быть 16 или 64 бита.Для seqnum вам следует использовать uint32_t.
При этом, если вы прочитали TCP-пакет из сети, порядковый номер находится в сетевом порядке (обратный порядок байтов), и поэтому для его печати вам необходимо вызвать ntohl (сеть для хоста - длинный).