struct ip
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ip_hl:4 /* header length */
unsigned int ip_v:4 /* version */
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int ip_v:4 /* version */
unsigned int ip_hl:4 /* header length */
#endif
u_int8_t 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_int8_t ip_ttl /* time to live */
u_int8_t ip_p /* protocol */
u_short ip_sum /* checksum */
struct in_addr ip_src, ip_dst /* source and dest address */
}
如果你仅仅是想改变某个IP包里面的ttl值,你需要自己创建这个ip结构。如果你是想在创建socket的时候改ttl值,用setsockopt函数
IP头部确实checksum只对IP头部中的每16bit进行二进制求和校验。为了提高效率,数据校验是放在TCP里的,TCPHEADER里面的checksum是对TCPHeader+Data进行的。两个不是一概念。。 checksum是一个概念,一串数据或者一个文件的校验码,叫做checksum。 如果一个文件的checksum与原本的checksum不一样的话,说明这个文件已经被改过了(被植入病毒或者广告)。 从这个角度来理解的话,checksum的计算方法有多...欢迎分享,转载请注明来源:内存溢出
评论列表(0条)