ICMP是(InternetControlMessageProtocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
1.相关ICMP协议概述
这里只讲解与ping有关的ICMP消息类型,主机发送回送消息(Type=8),被请求主机回送响应消息(Type=0),基本格式如下:
回送消息[ECHO]
回送响应消息[ECHOREPLY]
其中•Code=0,
•CheckSum为校验和,重点注意从ICMP的头部(即Type开始),到data结束(即到整个数据包结束),具体计算见下面分析
•Identifier为标识符,由主机设定,一般设置为进程号,回送响应消息与回送消息中identifier保持一致
•SequenceNumber为序列号,由主机设定,一般设为由0递增的序列,回送响应消息与回送消息中SequenceNumber保持一致
•data为数据,由主机设定,回送响应消息与回送消息中data保持一致
2.Ping流程
Ping实际上利用的就是ICMPECHO和ICMPECHOREPLY包来探测主机是否存在,所以Ping程序的流程十分简单:发送ICMPECHO包---->接收ICMPECHOREPLY包
发送ICMPECHO包时填充Identifier为进程ID,SequenceNumber为从0递增计数,data填充为发送时间
接收ICMPECHOREPLY包时检查Identifier,SequenceNumber是否正确,通过IP报头的源地址字段获得回送报文的主机地址是否正确
3.模拟Ping实现pingy
Ping的基本流程已讲解完
重要性
ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特
ICMP常用类型
ICMP常用类型
点决定了它非常容易被用于攻击网络上的路由器和主机。例如,在1999年8月海信集团“悬赏”50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视!
比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“PingofDeath”(死亡之Ping)攻击。“PingofDeath”攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。(操作系统已经取消了发送ICMP数据包的大小的限制,解决了这个漏洞)
此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。
由于要自己构造ICMP包,因此创建需要创建原始套接字(即需要自己填充报头):
sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)
SOCK_RAW用于直接访问网络层,应用程序负责构造自己的协议首部;IPPROTO_ICMP表示ICMP报头由程序构造
构造ICMP报头,注意各个字段的填充,特别是校验和(可以参照icmp的结构定义)
icmp->icmp_type
icmp->icmp_code
icmp->icmp_cksum
icmp->icmp_id
icmp->icmp_seq
icmp->icmp_data;
而完成系统的Ping命令还需添加信息统计,如发送字节数,收到字节数,发送包,接收包,发送时间,TTL等;另外,添加信号处理,在用户使用Control^C等退出时打印即时信息
4.最终效果如下
看完文章,有什么疑问么?如果有问题提出来和大家交流一下。也希望大家多支持课课家。
¥48.00¥180.00
¥199.00
¥29.90
¥48.00¥180.00
¥798.00
¥199.00