رقم تسلسل الطباعة لحزمة شم
-
20-09-2019 - |
سؤال
أنا أستخدم 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 (الشبكة لاستضافة - طويلة).
لا تنتمي إلى StackOverflow