Вопрос

я использую 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 (сеть для хоста - длинный).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top