سؤال

أنا أستخدم PCAP لإنشاء حزمة sniffer.
لدي هيكل 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 من الشبكة ، فإن رقم التسلسل بترتيب الشبكة (الكبير - endian) ، وبالتالي ، في حاجة إلى استدعاء NTOHL (الشبكة لاستضافة - طويلة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top