2010-01-23 9 views
1

Compte tenu de cette tête, comment puis-je trouver si le champ PLUS FRAGMENTS est défini ou non ..Comment trouver si le champ MORE FRAGMENTS est défini ou non?

struct sniff_ip { 
     u_char ip_vhl;     /* version << 4 | header length >> 2 */ 
     u_char ip_tos;     /* type of service */ 
     u_short ip_len;     /* total length */ 
     u_short ip_id;     /* identification */ 
     u_short ip_off;     /* fragment offset field */ 
     #define IP_RF 0x8000   /* reserved fragment flag */ 
     #define IP_DF 0x4000   /* dont fragment flag */ 
     #define IP_MF 0x2000   /* more fragments flag */ 
     #define IP_OFFMASK 0x1fff  /* mask for fragmenting bits */ 
     u_char ip_ttl;     /* time to live */ 
     u_char ip_p;     /* protocol */ 
     u_short ip_sum;     /* checksum */ 
     struct in_addr ip_src,ip_dst; /* source and dest address */ 
}; 

Répondre

2
struct sniff_ip ip_hdr; 
... 
if(ip_hdr.ip_off & IP_MF) { 
    //more fragments bit is set. 
} 
+2

... et, si les champs 'ip_hdr' sont dans l'ordre où ils sont en sur le réseau (par exemple, s'il s'agit d'un paquet capturé sur le réseau ou lu depuis un fichier de capture en utilisant libpcap/WinPcap et non modifié), n'oubliez pas de le convertir de l'ordre des octets du réseau vers l'ordre des octets avec ntohs() premier. –