当前位置: 技术问答>linux和unix
ping中指定ttl该如何实现?
来源: 互联网 发布时间:2016-03-18
本文导语: 大家好,我刚学习LINUX两个多月,这两天在编程模拟linux下ping命令的实现,暂时只实现了-i(发送时间间隔) -c(指定发送数据包个数) -s(指定发送数据包的数据大小),现在在实现-t(指定ttl)这个功能时遇到了问题,请各位...
大家好,我刚学习LINUX两个多月,这两天在编程模拟linux下ping命令的实现,暂时只实现了-i(发送时间间隔) -c(指定发送数据包个数) -s(指定发送数据包的数据大小),现在在实现-t(指定ttl)这个功能时遇到了问题,请各位指教!!
我抓了ping -t 2 [ipaddress]发出去的icmp的包,发现ip报头中的ttl始终是64,并不是-t参数指定的大小,说明发包的时候并没有修改ip报头,那它应该是怎么实现这个功能的呢?
我抓了ping -t 2 [ipaddress]发出去的icmp的包,发现ip报头中的ttl始终是64,并不是-t参数指定的大小,说明发包的时候并没有修改ip报头,那它应该是怎么实现这个功能的呢?
|
我看到ping的源码里是这样做的:
setsockopt(icmp_sock, IPPROTO_IP, IP_TTL, &ittl, sizeof(ittl))
setsockopt(icmp_sock, IPPROTO_IP, IP_TTL, &ittl, sizeof(ittl))
|
楼主用man ping仔细查看一下ttl应该怎样设置:
NetBSD: ping [-t tos] [-T ttl]
FreeBSD: ping [-t timeout] [-m ttl] [-T ttl]
其中的-T只用于广播。
OpenBSD: ping [-T tos] [-t ttl]
Linux: ping [-t ttl]
NetBSD: ping [-t tos] [-T ttl]
FreeBSD: ping [-t timeout] [-m ttl] [-T ttl]
其中的-T只用于广播。
OpenBSD: ping [-T tos] [-t ttl]
Linux: ping [-t ttl]