如何在linux里使用C语言修改ttl值

如何在linux里使用C语言修改ttl值,第1张

ttl是每个IP包里面携带的信息,数据结构在/include/netinet/ip.h里面,注意那个u_int8_t ip_ttl——

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的计算方法有多...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7179806.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存