编程实现ping命令,如何得到TTL值?(网络编程)

lf8336 2006-03-25 08:21:39
在编写类似ping命令的程序时,编程当中如何获得TTL值?
例如:要实现以下的语句
Pinging 211.100.21.179 with 32 bytes of data:
Reply from 211.100.21.179: bytes=32 time=45ms TTL=53
这里的"TTL=53"在程序中是如何实现的呢?通过什么方法得到这个值?
哎,我自己试了好几个方法,好象得到的TTL值和用系统提供的Ping命令得到的值不一样,很困惑!
哪位大虾能帮帮我,本人不甚感激!
...全文
314 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
DrSmart 2006-03-26
  • 打赏
  • 举报
回复
倒,给你一个简单的吧

SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "ping";
ShExecInfo.lpParameters = " 192.168.14.192 -t";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
显示结果可以有pipe传回

ttl就是生存值,每经过个路由自动减一,win2000以后系统默认为128,个人建议64比较好
huzhangyou 2006-03-25
  • 打赏
  • 举报
回复
不同的系统TTL值是不通的
qiujun1 2006-03-25
  • 打赏
  • 举报
回复
TTL就是系统类型吧
PiggyXP 2006-03-25
  • 打赏
  • 举报
回复
你写ping程序是用的raw socket构造ICMP数据包吗?

那你在接受回应icmp数据的时候,数据是有一个IP头的,这个IP头里面就有一项是ttl值呀

IP头结构如下

typedef struct tag_ip_header
{
unsigned char ver_ihl; // unsigned char 8位 版本(4位) + 头长(4位)
unsigned char tos; //TOS 服务类型
unsigned short tlen; //包总长 unsigned short占两个字节
unsigned short identification; //标识
unsigned short flags_fo; //标志位Flags(3位)+分段偏移(13位)
unsigned char ttl; //TTL -----》这个就是
unsigned char proto; //Protocol
unsigned short crc; //校验和
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
unsigned int op_pad; //选项+填充字段 u_int占4个字节 32位
//接下来是数据段,不属于IP头部
}IP_HEADER,*PIP_HEADER;
oyljerry 2006-03-25
  • 打赏
  • 举报
回复
TTL在路由跳时减一

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧