编程模拟ping程序.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

一、实验题目

编程模拟ping程序,实现Ping程序的根本功能,即接收到一个ping程序数据包后给出回应。

二、原理概述

ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。想要了解ping命令的原理必须了解ICMP协议、ICMP报文格式和IP报文格式。

〔1〕ICMP报文结构

ICMP报文结构:ICMP报文前四个字节为报文头局部,第一个字节为报文类型,第二个字节未用,第三四个字节为报文的校验和。从第四个字节开始为长度可变的数据段,该段的内容取决于ICMP的类型,本文所要使用的请求报文和请求应答报文的数据段中前四个字节是报文的标识符和顺序号。对于整个ICMP报文来说其长度最长不能超过64K字节。ICMP报文结构如图1所示。

0781516313247486364

类型

未用

校验和

标识符

顺序号

数据

〔2〕IP报文结构

ICMP报文和其它位于IP层的报文一样是作为IP报文的数据段加上IP报文头组成IP数据报发出,其中IP报文头长度一般为20个字节。如图2所示。

IP报文头

ICMP报文〔数据段〕

三、设计方案

根据实验题目查找相关资料,熟悉及理解ping的工作原理,从而进一步设计ping程序的功能图和系统流程图。准备工作做好后就可上机调试,验证其可行性并查找漏洞,完善ping程序。

ping程序的设计包含了4局部:IP、ICMP的头结构,主函数模块,CMP数据包校验和的计算和使用说明模块。

Ping程序设计

Ping程序设计

IP、ICMP的头结构

ICMP数据包校验和

主函数

模块

使用说明模块

SHAPE〔2〕系统流程图

首先在主函数里定义变量同时进行初始化,然后检查参数的正确性,如果参数不正确或者没有输入参数,那么显示用户帮助信息(Usage),并结束程序;如果参数正确,那么对指定目的地执行Ping命令,如果Ping通,那么显示Ping结果并释放占用资源,如果没有Ping通,那么报告错误信息,并释放占用资源。如图3所示。

开始

开始

初始化变量

获取参数信息

输入参数是否正确?

Ping目的地

成功?

输出Ping结果

释放占用资源

结束

输出错误信息

显示帮助信息

图3系统流程图

〔3〕数据结构设计

本程序定义了2个结构体:iphdr、-ihdr,分别用于存放IP报头信息、ICMP报头信息。

〔4〕主函数,使用说明,数据包校验和的计算的相关程序在程序中会有表达。

四、程序编写

#includewinsock2.h//WinsockAPI头文件

#includestdio.h

#includestdlib.h

#pragmacomment(lib,ws2_32.lib)//WinsockAPI连接库文件

/*IP头结构*/

typedefstructiphdr{

BYTEh_len:4;//首部长度指的是IP层头部占32bit字的数目

//(也就是IP层头部包含多少个4字节,实际字节数4*hlen),

BYTEversion:4;//IP版本号

BYTEtos;//效劳类型TOS

USHORTtotal_len;//IP包总长度

USHORTident;//标识

USHORTfrag_and_flags;//标志位

BYTEttl;//生存时间

BYTEproto;//协议

USHORTchecksum;//IP首部校验和

UINTsourceIP;//源IP地址(32位)

UINTdestIP;//目的IP地址(32位)

}IpHeader;

/*ICMP头结构*/

typedefstruct_ihdr{

BYTEi_type;//类型发出的ICMP为8(ICMP_ECHO_REQUEST),接受到的ICMP为0

BYTEi_code;//代码

USHORTi_cksum;//ICMP包校验和

USHORTi_id;//识别号(一般用进程号作为标识号)

USHORTi_seq;//报文序列号(一般设置为0)

ULONGtimestamp;//时间戳

}IcmpHeader;

USHORTchecksum(USHORT*,int);/

文档评论(0)

展翅高飞2020 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档