ping程序的设计与实现.docx
《ping程序的设计与实现.docx》由会员分享,可在线阅读,更多相关《ping程序的设计与实现.docx(13页珍藏版)》请在冰豆网上搜索。
ping程序的设计与实现
计算机网络课程设计任务书
学院
计算机与信息工程
专业
网络工程
课程名称
题目
基于原始套接字实现简单的ping程序
完成期限
自2014年8月25日至2014年8月30日共1周
内
容
及
任
务
一、项目的目的
通过设计Ping程序,理解Ping程序的实现原理,并初步讲解了c语言网络编程技术。
二、项目任务的主要内容和要求
⑴实现类似操作系统自带ping程序的基本功能。
⑵支持-t选项的功能,即如果用户不中止则可以不断的ping下去。
⑶能显示IP报头的部分字段,如TTL等。
三、项目设计(研究)思路
PING的工作原理下,PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。
对网络连通性的测试,探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。
四、具体成果形式和要求
可以实现一个简单的ping程序,并且能显示TTL、支持-t功能。
进
度
安
排
起止日期
工作内容
8.25-8.26
查阅资料了解ping程序
8.26-8.27
查阅资料并编写ping程序
8.27-8.30
完善程序并完成实验报告
主
要
参
考
资
料
1.VisualC++网络通信编程实用案例精选(第二版)曹衍龙编著
2.VisualC++网络程序设计实例详解张越编著
指导教师
意见
(签字):
×年×月×日
系(教研室)主任意见
(签字):
×年×月×日
计算机网络课程设计说明书
学院名称:
计算机与信息工程
班级名称:
学生姓名:
学号:
题目:
基于原始套间字实现简单的ping程序
指导教师
姓名:
起止日期:
一、选题背景(标题:
四号仿宋加粗,顶格,行间距:
24磅,上下间距:
段前0.5行,段后0.5行)(内容:
用小四号仿宋,首行空两格)
通过设计Ping程序,理解Ping程序的实现原理,ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。
ping 使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。
ICMP协议规定:
目的主机必须返回ICMP回送应答消息给源主机。
如果源主机在一定时间内收到应答,则认为主机可达。
ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。
因此,保证数据送达的工作应该由其他的模块来完成。
其中一个重要的模块就是ICMP(网络控制报文)协议。
二、方案设计(或概要设计)
Ping程序可分为四个模块,分别是:
初始化(图1-1)、功能控制(图1-2、图1-3、图1-4、)、ping(图1-5)、main测试(图1-6).
1.初始化:
2.功能控制:
图1-2
图1-3
图1-4
3.ping:
图1-5
4.main()函数:
图1-6
三、详细设计
要实现ping程序,需要实现以下步骤:
1.初始化
//定义IP首部格式
typedefstruct_IPHeader
{
u_charVIHL;//版本和首部长度
u_charToS;//服务类型
u_shortTotalLen;//总长度
u_shortID;//标识号
u_shortFrag_Flags;//片偏移量
u_charTTL;//生存时间
u_charProtocol;//协议
u_shortChecksum;//首部校验和
structin_addrSrcIP;//源IP地址
structin_addrDestIP;//目的地址
}IPHDR,*PIPHDR;
//定义ICMP首部格式
typedefstruct_ICMPHeader
{
u_charType;//类型
u_charCode;//代码
u_shortChecksum;//首部校验和
u_shortID;//标识
u_shortSeq;//序列号
charData;//数据
}ICMPHDR,*PICMPHDR;
//定义ICMP回应请求
typedefstruct_ECHOREQUEST
{
ICMPHDRicmpHdr;
DWORDdwTime;
charcData[REQ_DATASIZE];
}ECHOREQUEST,*PECHOREQUEST;
//定义ICMP回应答复
typedefstruct_ECHOREPLY
{
IPHDRipHdr;
ECHOREQUESTechoRequest;
charcFiller[256];
}ECHOREPLY,*PECHOREPLY;
2.功能
//计算校验和函数
u_shortchecksum(u_short*buffer,intlen)
//发送回应请求函数
intSendEchoRequest(SOCKETs,structsockaddr_in*lpstToAddr)
//接收应答回复并进行解析函数
DWORDRecvEchoReply(SOCKETs,LPSOCKADDR_INlpsaFrom,u_char*pTTL)
3.ping程序
//创建原始套接字,ICMP类型实现ping
rawSocket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);//第二个注释函数socket
if(rawSocket==SOCKET_ERROR)
{
printf("socket()error:
%d\n",WSAGetLastError());
return;
}
四、结果分析(或测试)
1.输入ping主机的命令
2.输入ping-t命令
3.输入外部网主机命令
五、总结
刚刚拿到课题时,我对于ping几乎没什么了解。
在课程设计过程中遇到过很多一开始看似不可克服的难题。
回顾这次课程设计,我感慨颇多。
在这段时间内,需要经常从电脑上查询资料,但是这不仅可以帮助我巩固曾经学习过的知识,也让我增长了许多课本上学不到的的知识。
在这个过程中,我独立思考的能力得到了很大地提高,更重要的是我也学到了更多学习的方法,让我受益匪浅。
同时我也明白查阅资料的重要性,在信息多元化的今天,我们不可能掌握所有的知识,但是面对的复杂的情况又要求我们掌握一些自己专业知识之外的内容,这时候就需要掌握正确的相关信息,学会求助书籍或者网络等是必不可少的。
查阅资料也使我们做的一切有理可依,而不是凭空想象。
通过这次课程设计我发现了自身存在的许多不足之处,自己感觉理论上已经掌握的东西,却不真正了解它的内涵和工作原理,需要经过一番努力才能解决存在的困惑。
这也很大地激发了我以后努力学习的兴趣。
通过这次设计,我懂得了学习的重要性,学会了坚持、耐心和努力,为自己以后的学习和工作做最好的铺垫。
参考文献
1.VisualC++网络通信编程实用案例精选(第二版)曹衍龙编著;
2.VisualC++网络程序设计实例详解张越编著
学生签名:
××××填表日期:
×年×月×日