如何在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函数,具体说明在此——http://linux.die.net/man/2/setsockopt。

1.打开“记事本”程序,编写批处理命令:

@echo REGEDIT4>>ChangeTTL.reg

@echo.>>ChangeTTL.reg

@echo [HKEY_LOCAL_MACHlNE\System\CurrentControlSet\Services\T cpip\Parameters]>>ChangeTTL.reg

@echo "DefaultTTL"=dword:000000">>ChangeTTL.reg

@REGEDIT /S/C ChangeTTL.reg

2.把编好的程序另存为以.bat为扩展名的批处理文件, 点击这个文件,你的 *** 作系统的缺省TTL值就会被修改为ff,即 10进制的255,也就是说把你的 *** 作系统人为地改为UNIX系统了 。同时,在该文件所在的文件夹下会生成一个名为 ChangeTTL.reg 的注册表文件。如果你想运行完这个批处理文件而不产生 ChangeTTL.reg文件,可以在此批处理文件的最后一行加上 deltree/Y ChangeTTL.reg,就可以无须确认自动删除ChangeTTL.reg文件 。

说明:在上面的命令中,echo是DOS下的回显命令,如 果想看到程序执行过程,请将“@”去掉。“>>”产生的内容将追加到它后面的文件即ChangeTTL.reg中。 而“DefaultTTL"=dword�000000ff”则是用来设置系统缺省TTL 值的,如果你想将自己的 *** 作系统的TTL值改为其他 *** 作系统的 ICMP回显应答值,请改变“"DefaultTTL"”的键值,要注意将 对应 *** 作系统的TTL值改为十六进制才可以。

一、TTL的默认值是多少?

不同的 *** 作系统,它的TTL值是不相同的。这里和大家谈谈一些常用的 *** 作系统的默认TTL值,默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。域名的dns解析默认的TTL值一般是60。

二、 *** 作系统的TTL最大值:

TTL最大值为255,如UNIX *** 作系统的TT值初始默认TTL值就是225。不同的系统最大值也是有所不同,对于实验室环境所使用 *** 作系统默认的TTL 最大值是128,所以要视情况而定。

三、如何修改TTL值

首先提醒大家这个TTL最好是设定初始默认值,不要去乱修改。一般情况下改动可能会出现错误,而且我们也不知道修改TTL值才是最合适。当然如果需要修改TTL值的话,修改TTL值其实非常简单。具体 *** 作如下:

1、点击“开始→运行”,在“运行”对话框中输入“regedit”命令并回车,d出“注册表编辑器”对话框,展开“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters”,找到“DefaultTTL”,将该值修改为十进制的“64”,重新启动服务器系统后即可。

2、或者尝试批处理文件来修改TTL值。首先打开记事本txt,将下面的代码粘贴到记事本上面:

@echo REGEDIT4>>ChangeTTL.reg

@echo.>>ChangeTTL.reg

@echo [HKEY_LOCAL_MACHlNESystemCurrentControlSetServicesT cpipParameters]>>ChangeTTL.reg

@echo "DefaultTTL"=dword:000000">>ChangeTTL.reg

@REGEDIT /S/C ChangeTTL.reg

然后在将记事本文件另存为.bat的批处理文件,文件夹自己设置,然后在运行这个.bat文件。你的 *** 作系统的缺省TTL值就会被修改为ff,即 10进制的255,也就是说把你的 *** 作系统人为地改为UNIX系统了。在修改之后会在当前文件夹.bat的路径上自动生成一个ChangeTTL.reg 的注册表文件。如果你想运行完这个批处理文件而不产生 ChangeTTL.reg文件,可以在此批处理文件的最后一行加上 deltree/Y ChangeTTL.reg,就可以无须确认自动删除ChangeTTL.reg文件 。

友情提示:

3、还有就是通过一些第三方工具来修改你的TTL值,比如苏苏查看TTL值工具就是可以查看TTL值及修改TTL值,建议你可以去试试。


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

原文地址: https://outofmemory.cn/tougao/8045478.html

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

发表评论

登录后才能评论

评论列表(0条)

保存