2010-03-18 2 views
0

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

ответ

0

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

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

+0

Я не думаю, что ntohl() работает, потому что он дает мне отрицательную последовательность и цифры. – scatman

+0

ntohl принимает значение * unsigned * integer в качестве параметра и в результате дает целое число без знака *. Итак, если вы не допустили большую ошибку, поставив результат ntohl в * signed * int, отрицательные числа не могут произойти. Покажите свой код. – bortzmeyer

+0

Я даю вам полезный совет: прочитайте документацию. 'man 3 printf' скажет вам, что «d, i Аргумент int преобразуется в подписанную десятичную нотацию». Я позволил вам самим понять, что необходимо для неподписанного. – bortzmeyer

Смежные вопросы