печать порядкового номера обнаруженного пакета - PullRequest
0 голосов
/ 18 марта 2010

Я использую 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

1 Ответ

0 голосов
/ 20 марта 2010

Если язык программирования C, обратите внимание, что ваша структура неверна, так как вы не указываете размеры полей. Например, порядковый номер составляет 32 бита, а «int» может быть 16 или 64 бита. Для seqnum вы должны использовать uint32_t.

Это, как говорится, если вы прочитали TCP-пакет из сети, порядковый номер находится в сетевом порядке (big-endian), и поэтому, чтобы распечатать его, вам нужно вызвать ntohl (сеть - хост - длинный).

...