问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ICMP超时报文的type和code字段各是多少?

发布网友 发布时间:2022-04-25 15:06

我来回答

3个回答

热心网友 时间:2023-09-08 01:54

基础:先看下ICMP的数据结构。 // ICMP header
typedef struct _tagX_icmphdr
{
unsigned char i_type; //类型
unsigned char i_code; //代码
unsigned short i_cksum; //检验和
unsigned short i_id; //标识符
unsigned short i_seq; //序列号
unsigned long i_timestamp; //当前时间 =(unsigned long)::GetTickCount();}XIcmpHeader; 各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型。常见的有:
  
  类型8、代码0:回射请求。
  
  类型0、代码0:回射应答。
  
  类型11、代码0:超时。
  
  16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。下图是一张ICMP回射请求和应答报文头部格式 对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。
  
最后是16bits序列号字段:用于判断回射应答数据报。 ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面一个ICMP报文包括IP头部(20字节)、ICMP头部(8字节)和ICMP报文IP头部的Protocol值为1就说明这是一个ICMP报文ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式此外还有代码(Code)域用于详细说明某种ICMP报文的类型所有数据都在ICMP头部后面。RFC定义了13种ICMP报文格式,具体如下:类型代码 类型描述0 响应应答(ECHO-REPLY)3 不可到达4 源抑制5 重定向8 响应请求(ECHO-REQUEST)11 超时12 参数失灵13 时间戳请求14 时间戳应答15 信息请求(*已作废)16 信息应答(*已作废)17 地址掩码请求18 地址掩码应答其中代码为15、16的信息报文已经作废。下面是几种常见的ICMP报文:1.响应请求我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。2.目标不可到达、源抑制和超时报文这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。3.时间戳时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。--------------------------------种类-------------------------------------ICMP报文格式
ICMP虽然是网络层的协议,但要将ICMP报文放入IP中发送。ICMP报文的公共头标由1字节的类型(type)、1字节的
代码(code)和2字节的校验和(checksum)组成。
类型域和代码域用来标识各种ICMP报文。类型域表示ICMP报文的类型,目前已定义了14
种,从类型值来看ICMP报文可分为二大类。第1 类是取值为1~127的差错报文,第2类是取值128以上的是信息(informational)报文。
1不能到达信宿(Destination Unreachable)差错报文
2分组过大(Packet Too Big)差错报文
3超时(Time Exceeded)差错报文
4参数问题(Parameter Problem)差错报文
128返回请求(Echo Request)报文
129返回应答(Echo Reply)报文
130组成员查询(Group Membership Query)
131组成员报告(Group Membership Report)
132组成员结束(Group Membership Termination)
133路由器请求(Router Solicitation)
134路由器公告(Router Advertisement)
135邻机请求(Neighbor Solicitation)
136邻机公告(Neighbor Advertisement)
137 重定向(Redirect)1 引题
这里提出一个概念:什么是主机扫描?主机扫描顾名思义就是扫描网络中存在的主机。那怎么扫描特定的主机是否存在呢?答案就是通过发送ICMP协议包来确定。那什么是ICMP包呢?
我打个不恰当的比方,ICMP包就好比邮局的快递,你要扫描一个主机是否存在,就向这个主机的地址(IP)发一个快递,不管是否投递成功,邮局都会通知你。那么你就知道该网络地址是否存在了。那么邮局的回单,我要如何分析才能知道对方的信息呢?那么我们就要来分析ICMP这个‘快递’包的投送回单。

具体的结构解释我就不多说了,网上很多,可以自己查阅
在Linux中ICMP数据结构(<netinet/ip_icmp.h>)定义如下: DE>
struct icmp
{
u_int8_t icmp_type; /* type of message, see below */
u_int8_t icmp_code; /* type sub code */
u_int16_t icmp_cksum; /* ones complement checksum of struct */
union
{
u_char ih_pptr; /* ICMP_PARAMPROB */
struct in_addr ih_gwaddr; /* gateway address */
struct ih_idseq /* echo datagram */
{
u_int16_t icd_id;
u_int16_t icd_seq;
} ih_idseq;
u_int32_t ih_void;

/* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
struct ih_pmtu
{
u_int16_t ipm_void;
u_int16_t ipm_nextmtu;
} ih_pmtu;

struct ih_rtradv
{
u_int8_t irt_num_addrs;
u_int8_t irt_wpa;
u_int16_t irt_lifetime;
} ih_rtradv;
} icmp_hun;
#define icmp_pptr icmp_hun.ih_pptr
#define icmp_gwaddr icmp_hun.ih_gwaddr
#define icmp_id icmp_hun.ih_idseq.icd_id
#define icmp_seq icmp_hun.ih_idseq.icd_seq
#define icmp_void icmp_hun.ih_void
#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void
#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu
#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs
#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa
#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime
union
{
struct
{
u_int32_t its_otime;
u_int32_t its_rtime;
u_int32_t its_ttime;
} id_ts;
struct
{
struct ip idi_ip;
/* options and then 64 bits of data */
} id_ip;
struct icmp_ra_addr id_radv;
u_int32_t id_mask;
u_int8_t id_data[1];
} icmp_n;
#define icmp_otime icmp_n.id_ts.its_otime
#define icmp_rtime icmp_n.id_ts.its_rtime
#define icmp_ttime icmp_n.id_ts.its_ttime
#define icmp_ip icmp_n.id_ip.idi_ip
#define icmp_radv icmp_n.id_radv
#define icmp_mask icmp_n.id_mask
#define icmp_data icmp_n.id_data
};
DE>
那么现在的问题我们怎么自己组装ICMP包,也就是我们的包裹呢?答案在下面
void make_icmp_packet(struct icmp *icmp,int len,int n)
{
memset((char *)icmp,0,len);
gettimeofday((struct timeval*)(icmp->icmp_data),(struct timezone*)0 );
//生成ICMP报头
icmp->icmp_type=ICMP_ECHO;
icmp->icmp_code=0;
icmp->icmp_id=getpid();
icmp->icmp_seq=n;
//icmp->icmp_cksum=0;//进行检查和,要或不要均可
icmp->icmp_cksum=checksum((u_short*)icmp,len);
}

这里有一个校验和的程序,我在网上down了一个,大家就这么用好了
u_short checksum(u_short *data,int len)
{
u_long sum=0;
for(;len>1;len-=2)
{
sum+=*data++;
if(sum & 0x80000000)
sum=(sum & 0xffff)+(sum>>16);
}
if(len==1)
{
u_short i=0;
*(u_char*)(&i)=*(u_char*)data;
sum+=i;
}
while(sum>>16)
{
sum=(sum & 0xffff)+(sum>>16);
}
return (sum==0xffff)?sum:~sum;

}
需要扫描,那么自然需要一个定时器,做超时控制
void tvsub(struct timeval* out,struct timeval *in)
{
out->tv_sec-=in->tv_sec;
}
好了,一切就绪,我们现在可以开始我们的主机扫描之旅了
#include <stdio.h>
#include <unistd.h>
#include <sys/select.h>
#include <string.h>
#include <netinet/ip_icmp.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define PACK_LEN 72
#define BUFSIZE 4096

int main(int argc, char *argv[])
{
struct sockaddr_in send_sa;
//struct s;
int i=0,j=0;
int scan_icmp_socket;
char send_buff[PACK_LEN];
char recv_buff[BUFSIZE];
struct in_addr start_addr,end_addr;
struct timeval tv;
fd_set readfd_set;
struct ip *ip;
struct icmp *icmp;
int hlen; //报头 长度

send_sa.sin_family=AF_INET;
scan_icmp_socket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
if (scan_icmp_socket<0)
{
perror("scan_icmp_socket:");
return -1;
}
char ip_addr[17];
//循环ip地址
for (j=1;j<254;j++)
{
memset(ip_addr,'\0',sizeof(ip_addr));
sprintf(ip_addr,"%s.%d",argv[1],j);
send_sa.sin_addr.s_addr=inet_addr(ip_addr);
printf("scan %s\n",inet_ntoa(send_sa.sin_addr));
fflush(stdout);
for (i=0;i<3 ;i++ )
{
make_icmp_packet((struct icmp*)send_buff,PACK_LEN,i);
if ( (sendto(scan_icmp_socket,send_buff,PACK_LEN,0,(struct sockaddr*)&send_sa,sizeof(send_sa)))<0 )
{
perror("sendto");
}
//设定超时0.4妙
tv.tv_sec=0;
tv.tv_usec=400*1000;
FD_ZERO(&readfd_set);
FD_SET(scan_icmp_socket,&readfd_set);
while(1)
{
if (select(scan_icmp_socket+1,&readfd_set,NULL,NULL,&tv)<=0)
{
break;
}
//等待0.4妙后如果数据有回应那么就开始接收包含ICMP包的IP报
if (recvfrom(scan_icmp_socket,recv_buff,BUFSIZE,0,NULL,NULL)<=0)
{
perror("recvfrom:");
exit(0);
}
ip=(struct ip*)recv_buff;
//获得IP数据包长度;
hlen=ip->ip_hl<<2;
//根据IP的源ip是否和自己相同判断是否是自己收到的包
if (ip->ip_src.s_addr==send_sa.sin_addr.s_addr)
{
icmp=(struct icmp*)(recv_buff+hlen);
//解析icmp包内容信息
if (icmp->icmp_type==ICMP_ECHOREPLY)
{
printf("%-15s",inet_ntoa( *(struct in_addr*)
&(ip->ip_src.s_addr)));
//获得当前系统时间后与ICMP包内的数据内容对比
gettimeofday(&tv,NULL);
tvsub(&tv,(struct timeval*) (icmp->icmp_data));
printf(":RTT=%8.4f ms\n",tv.tv_sec+tv.tv_usec/1000.0);
break;
}
else
{
printf("ICMP STATE:%d\n",icmp->icmp_type);
}
}
}
}

}
close(scan_icmp_socket);
return 0;
}

至此,我们主机扫描的原理和实现已经讲完了,那么主机扫描有什么用?
没错,主机是否可到达是网络安全测试的第一步内容。而且,每次有人发送ICMP包,你的电脑都要应答。如果很多人同时发送ICMP包达到你的电脑,也就是说邮局同时送来了1000个包裹,你可能就有些应付不了了吧。这时候的状态就是你的电脑上网很卡很卡,或者根本上不了。那么我们怎么防范ICMP攻击呢,或者我不想别人知道我的电脑到底在不在上网?很简单,装个防火墙,将拒绝ICMP勾选上就可以了。
其实说了半天,ICMP多半用来DOS攻击,这种攻击多半基于单机,带宽小,效率低,对于被扫描者不会造成很大的危害。然后,目前的网络攻击多半是类似云计算的形式,当成千上万的肉鸡向你发动攻击的时候,那可不是好玩的。

热心网友 时间:2023-09-08 01:55

Type: 11
Code: 0

热心网友 时间:2023-09-08 01:55

03 03
ICMP超时报文的type和code字段各是多少?

unsigned long i_timestamp; //当前时间 =(unsigned long)::GetTickCount();}XIcmpHeader; 各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型。常见的有: 类型8、代码0:回射请求。 类型0、代...

ICMP报文类型有哪些

ICMP虽然是网络层的协议,但要将ICMP报文放入IP中发送。如图3.1所示,下一个头标值 58表示ICMP报文。由该图可见,ICMP报文的公共头标由1字节的类型(type)、1字节的 代码(code)和2字节的校验和(checksum)组成。类型域和代码域用来标识各种ICMP报文。类型域表示ICMP报文的类型,目前已定义了14 种...

ICMP报文类型及作用(简答)

总体上被分为两种类型:差错报文和信息报文。差错报文的报文类型从0到127;信息报文的类型从128到255。ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文,IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)...

根据抓到的包,分析icmp报文格式,给出icmp的类型字段值是多少

Type:8 Code:0 Checksum:0x4c90 通过查询ICMP报文类型可知,Type为8的包为 回射请求(Ping请求)使用相同的方法,查看Echo (ping) reply包,得到type类型为0 通过查询ICMP报文类型可知,Type为0的包为 回射应答(Ping应答)具体如下图

ICMP的中文意思

Code=0表示传输超时,Code=1表示重组分段超时。3.时间戳 时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。

什么是路由重定向?ICMP为重定向产生的报文格式是什么?

坏处:可能会出现一定的延时,造成网速变慢。但是一切都是由路由的路由表自动控制的 ICMP为重定向产生的报文格式:各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)8bits类型和8bits代码字段:一起决定了ICMP报文的类型。

ICMP报文的开始的三个固定长度的字段:type字段、code字段、checksum字段...

应该是对的。分别是8位、8位、16位。

TCP/IP高手请进

1.这个报文为ICMP不可达差错报文,可以用来发现路径中最小MTU; 格式:类型字段为3(00000011),代码字段为4(00000100)2.这个报文为ICMP源抑制报文,主要用来控制源站UDP包的发送速度,而TCP包是可靠的,可以通过滑窗机制控制双方的速度,但UDP就需要源抑制来进行拥塞控制了; 格式: 类型字段为4(...

ICMP协议详解

最后是16bits序列号字段:用于判断回射应答数据报。2.3 ICMP目标不可达报文 如图2所示,是ICMP目标不可达报文头部格式。图2 ICMP目标不可达报文头部格式 其中代码字段的不同值又代表不同的含义,如,0代表网络不可达、1代表主机不可达等,见表1。2.4 ICMP超时报文头部格式 如图3所示,是ICMP超时报文...

收到ICMP 报文,类型是: 3,代码是:3

最上面的哪个是辽宁省大连市 网通用户,应该是中木马后成肉鸡自动连接未成功。其他是不可到达报文,是连接对方一个不存在的系统端口时,将返回Type=3、Code=3的ICMP报文。可能你用什么软件引起,也可能是你已变成肉鸡了。

udp报文中包括的字段有 http请求报文有哪些字段 http报文头有哪些字段 udp报文头部字段 gettypecode icmptypecode ip报文字段含义 tcp报文中的确认序号 报文必输字段缺失什么意思
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
劲酒酱酒品牌简介,你了解你喜欢的劲酒吗 结肠直肠癌病理 土特产店铺取名字大全新236个 给小孩子洗衣服应该注意什么? 大米可以冷冻在冰箱吗 ...专业技术资格(水平)考试辅导用书:信息处理技术员考试辅导教程目录... ...专业技术资格(水平)考试辅导用书:信息处理技术员考试辅导教程内容简 ... ...专业技术资格(水平)考试辅导用书:信息处理技术员考试辅导教程基本信 ... ...专业技术资格(水平)考试辅导用书:信息处理技术员考试辅导教程编辑推 ... 网络与新媒体专业好还是汉语言文学好 请问下,招商银行的银联Young青年卡黑色金卡,额度是多少到多少的呢? young卡申请有学历限制吗,额度多少 招聘兼职人员 请问招商银行,银联标准YOUNG是普卡还是金卡?额度有多少? 请问招商银行,银联标准YOUNG是普卡还是金卡?额度有多少? 怎么招聘兼职? 南昌市进贤县那里招公务员 招行标准YOUNG卡青年版(金卡)额度是多少? 南昌有哪些职业中介 我需要招聘兼职 招聘兼职。日赚50左右。卜嫌钱少的留下联系方式。(上传视频)。 进贤老洪达最新招聘信息 进贤有什么自由的工作, 各位亲,帮帮忙,进贤哪里还招临时工,真的,急切需要!!!最好包吃住。。。 梦见金色的鲤鱼亲我一口? 我今天做梦梦到猴子了,它就在窗户外面进不来,我看到下面还有一个死了... 周公解梦梦到金色的鲤鱼飞进我的怀里 梦到一只小猴子快死了,我一直念南无阿弥陀佛想让它好起来醒过来。是 梦见一个很可爱的小猴子,但是间接性的被我害死了,帮我解答一下这个梦吧 梦到开始不知道从哪里劳来的金鲤鱼有些干枯,于是送到山上房子里的小池子里养, 梦见抓到一条金色鲤鱼和别人请我吃饭预示着什么? ICMP报文的开始的三个固定长度的字段:type字段、code字段、checksum字段 ping 时出现以下情况 icmp_type=3 (Dest Unreachable) icmp_code=1是什么意思? 银联标准young卡(黑)是普卡还是金卡?最低额度多少? Icmp协议有端口号吗?多少 请教K大:ICMP协议有什么作用? 计算机网络实验报告 ICMP 收到ICMP 报文,类型是: 3,代码是:3 我是一棵小草童话故事四十字 Icmp协议有端口号吗 五十字的名人故事,和四十字的聪明人故事有哪些? 柠檬怎么吃口感最好? 庄河市在全国同级市排第几 鲁迅故事四十字 辽宁省的一线城市都有哪些 根据抓到的包,分析icmp报文格式,给出icmp的类型字段值是多少 辽宁二级城市有哪些 汶川大地震感人的故事三十到四十字左右 ICMP包里的数据有什么用? 四十字的小故事关于长城的 华为路由器的配置命令,谁能详细的帮我翻译一下,谢谢啊