(高手请进) 在icmp tx协议中Ping的结果 显示"request time out" 是不是代表 TTL=0 ??

网络编程高手请进!!!!!!-中国学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
> 信息中心 >
网络编程高手请进!!!!!!
来源:互联网 发表时间: 1:01:54 责任编辑:王亮字体:
为了帮助网友解决“网络编程高手请进!!!!!!”相关的问题,中国学网通过互联网对“网络编程高手请进!!!!!!”相关的解决方案进行了整理,用户详细问题包括:我采用原始套接字发送ICMP数据包(ECHO&Request)给本地主机为什么收不到会收不到ECHO&RESPONSE&数据包呢?代码如下:&&char&buffer[sizeof(ICMPHeader)+32];&&&&&&&&char&recvbuff[1024];&&&&&&&&int&fromlen,timeout,&&&&&&&&int&lost,success,&&&&&&&&AnsiString&Ip;&&&&&&&&SOCKET&P&&&&&&&&SOCKADDR_IN&addr_&&&&&&&&SOCKADDR_IN&&&&&&&&&SOCKADDR_IN&&&&&&&&&AnsiString&Message[50];&&&&&&&&ICMPHeader*P&&&&&&&&Ping=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);&&&&&&&&timeout=2000;&&&&&&&&&//&setsockopt(Ping,IPPRPTO_IP,&&&&&&&&addr_in.sin_family=AF_INET;&&&&&&&&addr_in.sin_addr.s_addr=inet_addr(Edit1-&Text.c_str());&&&&&&&&address.sin_family=AF_INET;&&&&&&&&address.sin_port=htons(0);&&&&&&&&address.sin_addr.s_addr=htonl(INADDR_ANY);&&&&&&&&if(bind(Ping,(sockaddr*)&address,sizeof(address))==SOCKET_ERROR)&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&//&&setsockopt(Ping,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout));&&&&//&&&&setsockopt(Ping,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));&&&&&&&&memset(buffer+sizeof(ICMPHeader),'@',32);&&&&&&&&Memo1-&Lines-&Add("ping&&&"+Edit1-&Text);&&&&&&&&fromlen=sizeof(from);&&&&&&&&lost=0;&&&&&&&&success=0;&&&&&&&&count=Edit2-&Text.ToInt();&&&&&&&&for(int&i=0;i&i++)&&&&&&&&{&&&&&&&&&&&&&&&&Fill_ICMPHeader(buffer,i);&&&&&&&&&&&&&&&&if(sendto(Ping,buffer,sizeof(ICMPHeader)+32,0,(sockaddr*)&addr_in,sizeof(addr_in))==SOCKET_ERROR)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if((recvlen=recvfrom(Ping,recvbuff,1024,0,(sockaddr*)&from,&fromlen))&=0)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&Message[i]="request&time&out"&;&&&&&&&&&&&&&&&&&&&&&&&&lost++;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&Pheader=(ICMPHeader*)(recvbuff+sizeof(IPHeader));&&&&&&&&&&&&&&&&&&&&&&&&if(Pheader-&type=3)&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&switch(Pheader-&code)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&0:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Message[i]="Destination&net&not&reached";&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&lost++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case&2:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Message[i]="Destination&host&not&reached";&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&lost++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&if(Pheader-&type==11)&&&&&&&&&&&&&&&&&&&&&&&&if(Pheader-&type==0&&Pheader-&code==0)&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&IPHeader&*ipheader=(IPHeader*)&&&&&&&&&&&&&&&&&&&&&&&&&&&Ip.sprintf("%d.%d.%d.%d",ipheader-&source_ip[0],ipheader-&source_ip[1],ipheader-&source_ip[2],ipheader-&source_ip[3]);&&&&&&&&&&&&&&&&&&&&&&&&&&Message[i].sprintf("Reply&from&%s:&bytes=%d&time&10ms&TTL=%d",Ip,recvlen,ipheader-&ttl)&;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&Sleep(1000);&&&&&&&&}&&&&&&&&for(int&i=0;i&i++)&&&&&&&&{&&&&&&&&&&&&&&&&Memo1-&Lines-&Add(Message[i])&;&&&&&&&&}&&&&&&&&Memo1-&Lines-&Add("Ping&statistics&for&&&&"+Edit1-&Text);&&&&&&&&AnsiString&s;&&&&&&&&s.sprintf("Packets:&Sent&=&%d,&Received&=%d,&Lost&=&%d",count,success,lost);&&&&&&&&Memo1-&Lines-&Add(s);,具体解决方案如下:解决方案1:学习,帮你up解决方案2:晕...解决方案3:太长了,不看了,这是一段好用的Ping代码。#include&&vcl.h&#include&&winsock2.h&//---------------------------------------------------------------------------#pragma&argsused#pragma&hdrstop#include&"Unit1.h"//---------------------------------------------------------------------------#pragma&package(smart_init)#pragma&resource&"*.dfm"TForm1&*Form1;//USELIB("ws2_32.lib");typedef&struct&_ihdr{&&BYTE&i_&&&&&//类型:8--请求回送,0--请求回送回应&&BYTE&i_&&&&&//代码&&0&&USHORT&i_&&//校验和&&USHORT&i_&&&&&//ID号,协议中无具体定义,一般填写进程ID&&USHORT&i_&&&&//序列号&&//上面为真实的头&&//数据部分&&ULONG&}&IcmpHvoid&fill_icmp_data(char&*&icmp_data,int&datasize);&&//填充包USHORT&checksum(USHORT&*&buffer,int&size);&&//计算校验和//---------------------------------------------------------------------------__fastcall&TForm1::TForm1(TComponent*&Owner)&&&&:&TForm(Owner){}//---------------------------------------------------------------------------void&__fastcall&TForm1::Button1Click(TObject&*Sender){&&WSADATA&WSAD&&SOCKET&sockRAW;&&//初始化&&if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)&&{&&&&ShowMessage("Socket初始化失败!");&&&&ShowMessage("错误信息:"+WSAGetLastError());&&&&&&}&&//版本支持&&if(WSAData.wVersion&0x0200)&&{&&&&ShowMessage("你的系统的Socket版本太低!");&&&&WSACleanup();&&&&&&}&&//建立socket描述符&&if((sockRAW=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,0))==0)&&{&&&&ShowMessage("创建socket描述符失败!");&&&&ShowMessage("错误信息:"+WSAGetLastError());&&&&WSACleanup();&&&&&&}&&//设置超时选项&&int&rcvTimeout=1000;&//接收&&if((setsockopt(sockRAW,SOL_SOCKET,SO_RCVTIMEO,(char&*)&rcvTimeout,sizeof(rcvTimeout)))!=0)&&{&&&&ShowMessage("选项设置失败!");&&&&ShowMessage("错误信息:"+WSAGetLastError());&&&&closesocket(sockRAW);&&&&WSACleanup();&&&&&&}&&int&sndTimeout=1000;&//发送&&if((setsockopt(sockRAW,SOL_SOCKET,SO_SNDTIMEO,(char&*)&sndTimeout,sizeof(sndTimeout)))!=0)&&{&&&&ShowMessage("选项设置失败!");&&&&ShowMessage("错误信息:"+WSAGetLastError());&&&&closesocket(sockRAW);&&&&WSACleanup();&&&&&&}&&sockaddr_in&&&memset(&sourc,0,sizeof(sourc));&&sourc.sin_family=AF_INET;&&sourc.sin_addr.S_un.S_addr=htonl(INADDR_ANY);&&if((bind(sockRAW,(sockaddr&*)&sourc,sizeof(sourc)))==SOCKET_ERROR)&&{&&&&ShowMessage("地址绑定错误!");&&&&closesocket(sockRAW);&&&&WSACleanup();&&&&&&}&&//地址转换&&sockaddr_in&&&memset(&dest,0,sizeof(dest));&&dest.sin_family=AF_INET;&&dest.sin_addr.S_un.S_addr=inet_addr(Edit1-&Text.c_str());&&//包大小&&int&datasize=32+sizeof(IcmpHeader);&&//内存分配&&char&*&icmp_data=(char&*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,1024);&&char&*&recvbuf=(char&*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,1024);&&if(icmp_data==NULL||recvbuf==NULL)&&{&&&&ShowMessage("内存分配错误!");&&&&closesocket(sockRAW);&&&&WSACleanup();&&&&&&}&&memset(icmp_data,0,1024);&&for(int&i=0;i&5;i++)&&{&&&&fill_icmp_data(icmp_data,datasize);&&&&((IcmpHeader&*)icmp_data)-&i_seq=i;&&&//序列号&&&&((IcmpHeader&*)icmp_data)-&i_cksum=checksum((USHORT&*)icmp_data,datasize);&&&&int&bwrote=sendto(sockRAW,icmp_data,datasize,0,(struct&sockaddr&*)&dest,sizeof(dest));&&&&if(bwrote==datasize)&ShowMessage("OK,发送成功!");&&&&else&ShowMessage("Sorry,发送失败!");&&}&&&&closesocket(sockRAW);&&WSACleanup();}//---------------------------------------------------------------------------void&fill_icmp_data(char&*&icmp_data,int&datasize){&&IcmpHeader&*&icmp_hdr=(IcmpHeader&*)icmp_&&char&*&&&icmp_hdr-&i_type=8;&&&//类型:请求回送包&&icmp_hdr-&i_code=0;&&&//代码:0&&icmp_hdr-&i_id=(USHORT)GetCurrentProcessId();&&//进程ID作为包的ID&&icmp_hdr-&i_cksum=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&//校验和&&icmp_hdr-&i_seq=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//序列号&&icmp_hdr-&timestamp=GetTickCount();&&datapart=icmp_data+sizeof(IcmpHeader);&&memset(datapart,'E',datasize-sizeof(IcmpHeader));}USHORT&checksum(USHORT&*&buffer,int&size){&&&&unsigned&long&cksum=0;&&&&while(size&&1)&&&&{&&&&&&&&cksum+=*buffer++;&&&&&&&&size&-=sizeof(unsigned&short);&&&&}&&&&if(size)&&&&cksum&+=&*(unsigned&char*)&&&&cksum&=&(cksum&&&&16)&+&(cksum&&&0xffff);&&&&cksum&+=&(cksum&&&16);&&&&return&(unsigned&short)(~cksum);}解决方案4:W解决方案5:&好长,可能防火墙会阻断
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号局域网路由器ping 命令显示 destination net unreachable 怎么回事?_百度知道
局域网路由器ping 命令显示 destination net unreachable 怎么回事?
”destination net unreachable“这句话的意思是”目标主机不可达“。原因如下:所ping的IP地址错误;所ping的IP地址在局域网中不存在;所ping的IP地址所在的设备拒绝了被ping相应;路由器没有到达目标网段的路由(主机地址不可达,就会被路由器丢弃);局域网中没有互通。或者是互通不完全(正常的链路就如双车道,一来一回,但是有些网络配置原因,导致成了单车道),ping信息有去无回;
其他类似问题
为您推荐:
目标主机不能到达 “Destination Host Unreachable”信息说明对方主机不存在或者没有跟对方建立连接。 网线没接好,或者网卡有问题! 检查物理连接,重启机子 一般在确定你的TCP/IP网络属性的设置正确下,检查你的网线或者网卡是不是没插好 我想应该是物理连接方面没接好吧。。。 机子已经用了好几年了,N多灰尘。。。 路由表中连到达目标的路由都没有,会出现“Destination Host Unreachable”。 主要在以下三种情形出现: 1畅龚扳夹殖蝗帮伟爆连、 局域网使用DHCP动态分配IP地址时,DHCP出现故障或者失败 DHCP失效或者出现故障时,客户机无法分配到IP地址,系统只有自设IP地址,而IP地址的自动设置往往会分配到不同的子网,因此会出现“Destination Host Unreachable”。 2、 子网掩码设置错误 这种情况一般比较少见,如果子网掩码不是系统自动生成的,则在计算时一定细心。 3、 路由表返回错误信息 这种情况一般是在“Destination Host Unreachable”前面加上IP地址,说明本地计算机与外部网络连接没有问题,但与某台主机连接存在问题。 &Destination Net Unreachable&这个信息表示对方主机不存在或者没有跟对方建立连接。这里要说明一下&destination host unreachable&和&time out&的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现&time out&,如果路由表中连到达目标的路由都没有,那就会出现&destination host unreachable&。 把icmp安全策略关闭 tcp/IP属性——高级——选项——IP安全机制属性——选择&不使用IPSEC&确定,OK了,一切正常 ping 时出request time out 和destination is unreachable request time out 是指icmp包发出后,长时间没有回应,所以会产生request time out。一般是ping 了一台网络中不存在的主机。 destination is unreachable 或 destination port unreachable 一般是收到了目标主机或中间路由器回应的端口或目标主机不可达icmp包。 如你ping一台用iptables封了icmp包的主机且用了-j REJECT 就会出现destination port unreachable 的信息,这是目标主机给的回应。 两者主要的区别是看目标主机或中间路由器是不是给了icmp不可达的回应。 向目标主机发ip数据报,如果协议项是错的,或协议项不可用。目标将返回destination is unreachable的icmp报文。如果有防火墙,可能过滤掉ip数据报,收不到回应报文。如果设置ip头部协议内容为一特别大的数字(至少在今天还没有被使用),应该主机一定会返回unreachable的icmp报文。否则一定有防火墙。也可以变化ip中的协议项来探测主机使用了哪些协议,如果没使用则返回unreachable的icmp报文。 还有一个可能,是不是你们当地的服务商限制路由了??? 不知道你的路由器是几个人怎么分的 还有一种可能,有人攻占了你的路由器,并且设置了不对你的电脑进行服务(一般也改了路由的密码) 最简单的方法就是 重启路由器 捅一下RESET建
ping的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于公司局域网内两台机器互ping时通时不通的问题_百度知道
关于公司局域网内两台机器互ping时通时不通的问题
254,使用飞秋时.254,ping不通。原以为是网络的问题。.119。谢谢了.16。:replay from 10,发现时断时续。,还是不行。真的很奇怪,操作系统也是用同一张盘做的系统。.1。在与朋友这机器连不通的同时我的电脑IP是10。包括集团及同一办公地的同事的机器都能连通。附不通时ping朋友电脑的信息pinging 10,也换过网线了。.179 wiith 32 bytes of date: Destinaation host unreachable求大家帮忙解决下。,朋友的电脑是10。杀毒软件用的avast。我关掉windows自带的防火墙。.119,能发消息传文件,当我机器与对方不通时.5.179,我机器上内部网站却一点问题都没有: Destinaation host unreachablereplay from 10.119,也不管用。包括一台同型号的电脑.185.185。同事用的都是这个软件。也杀过毒没什么问题。,但有时突然就断线了.131.1,有时很顺.254。换IP也不管用.185。,结果后来发现.16: Destinaation host unreachablereplay from 10,用同屋同事的电脑却能连通对方.1,就是说
提问者采纳
IP属性——高级——选项——IP安全机制属性——选择&quot。 destination is unreachable 或 destination port unreachable 一般是收到了目标主机或中间路由器回应的端口或目标主机不可达icmp包,如果所经过的路由器的路由表中具有到达目标的路由,N多灰尘,一切正常 ping 时出request time out 和destination is unreachable request time out 是指icmp包发出后;这个信息表示对方主机不存在或者没有跟对方建立连接,这时候会出现&quot。 主要在以下三种情形出现,那就会出现&quotdestination host unreachable 目标主机不能到达 “Destination Host Unreachable”信息说明对方主机不存在或者没有跟对方建立连接。 机子已经用了好几年了、 局域网使用DHCP动态分配IP地址时,应该主机一定会返回unreachable的icmp报文;destination host unreachable&quot、 子网掩码设置错误 这种情况一般比较少见,DHCP出现故障或者失败 DHCP失效或者出现故障时。 2,或者网卡有问题,而IP地址的自动设置往往会分配到不同的子网。 3,如果没使用则返回unreachable的icmp报文,如果路由表中连到达目标的路由都没有,收不到回应报文;destination host unreachable&quot。一般是ping 了一台网络中不存在的主机、 路由表返回错误信息 这种情况一般是在“Destination Host Unreachable”前面加上IP地址,客户机无法分配到IP地址。 路由表中连到达目标的路由都没有。也可以变化ip中的协议项来探测主机使用了哪些协议;: 1,长时间没有回应,如果子网掩码不是系统自动生成的,会出现“Destination Host Unreachable”,这是目标主机给的回应;和&quot。 把icmp安全策略关闭 tcp/time out&quot,或协议项不可用,但与某台主机连接存在问题;Destination Net Unreachable&time out&quot。 &quot。否则一定有防火墙。这里要说明一下&quot! 检查物理连接,OK了,检查你的网线或者网卡是不是没插好 我想应该是物理连接方面没接好吧。。 两者主要的区别是看目标主机或中间路由器是不是给了icmp不可达的回应,说明本地计算机与外部网络连接没有问题。;的区别;,可能过滤掉ip数据报。如果设置ip头部协议内容为一特别大的数字(至少在今天还没有被使用)。 向目标主机发ip数据报,重启机子 一般在确定你的TCP&#47。如果有防火墙;IP网络属性的设置正确下,系统只有自设IP地址,而目标因为其它原因不可到达,因此会出现“Destination Host Unreachable”。目标将返回destination is unreachable的icmp报文,如果协议项是错的。。。 如你ping一台用iptables封了icmp包的主机且用了-j REJECT 就会出现destination port unreachable 的信息,所以会产生request time out,则在计算时一定细心;确定;不使用IPSEC&quot。 网线没接好
提问者评价
谢谢,我改了子网掩码,今天一上午未出现断流情况。
其他类似问题
为您推荐:
ping的相关知识
其他1条回答
局域网内不是同一个网段内是不能PING通的
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一个上网问题,高手请进,在线等答案_百度知道
一个上网问题,高手请进,在线等答案
有些网站确登录不了我连在路由器上上网,有谁可以告诉我是什么原因吗,登录不了的网站我测试了下,但是今天不行,昨天语遇到这样的问题,我重启路由器就可以上了,一种ping的是request time out,一种是ping的通,大部分网站可以登录
提问者采纳
如果不是那些网站有问题,说明的你路由和域名解晰还是没有问题的其他可以访问,就是部分DNS的解晰有问题了,有的不能访问
提问者评价
其他类似问题
为您推荐:
其他1条回答
.这是网络质量问题~.
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁使用ping命令去ping对方IP时,结果为Request time out ,为何?_百度知道
使用ping命令去ping对方IP时,结果为Request time out ,为何?
提问者采纳
其实ping命令失败有好些原因,常见的两种如下:1、安装了个人防火墙
在共享上网的机器中,出于安全考虑,大部分作为服务器的主机都安装了个人防火墙软件,而其他作为客户机的机器则一般不安装。几乎所有的个人防火墙软件,默认情况下是不允许其他机器Ping本机的。一般的做法是将来自外部的ICMP请求报文滤掉,但它却对本机出去的ICMP请求报文,以及来自外部的ICMP应答报文不加任何限制。这样,从本机Ping其他机器时,如果网络正常,就没有问题。但订碃斥度俪道筹权船护如果从其他机器Ping这台机器,即使网络一切正常,也会出现“超时无应答”的错误。
二、错误设置IP地址
正常情况下,一台主机应该有一个网卡,一个IP地址,或多个网卡,多个IP地址(这些地址一定要处于不同的IP子网)。但对于在公共场所使用的电脑,特别是网吧,人多手杂,其中不泛有“探索者”。曾有一次两台电脑也出现了这种单方向Ping通的情况,经过仔细检查,发现其中一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCP/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机Ping其他的机器时,会存在这样的问题:
(1)主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段;
(2)主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去Ping其他机器,IP层协议会无法处理,超时后,Ping 就会给出一个“超时无应答”的错误信息提示。但从其他主机Ping这台主机时,请求包从特定的网卡来,ICMP只须简单地将目的、源地址互换,并更改一些标志即可,ICMP应答包能顺利发出,其他主机也就能成功Ping通这台机器了
提问者评价
为您推荐:
其他5条回答
目标计算机没有开启 目标IP错误目标计算机屏蔽了对PING命令的相应
这种情况我也遇到过好多次~
大致我总结为:
1.物理线路没连接好。 Fg : 接口松了,或者坏了。
2.对方没开机。 此ping命令的不到对方的回答,限定的时间到了就会显示Request time out !
3.你的网络连接有问题!~
这可能是你在上不了网的情况下 运行ping 命令的。
呵呵,不在同一局域网内,或者说成两台电脑之间根本就没有通信!
原因是你ping的那个IP禁ping了或者那个机器没有开启
对方不可达。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 icmp tx 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信