ping程序的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络课程设计任务书
页脚内容1
页脚内容2
计算机网络课程设计说明书
学院名称:计算机与信息工程
班级名称:
学生姓名:
学号:
题目:基于原始套间字实现简单的ping程序
页脚内容3
指导教师
姓名:
起止日期:
一、选题背景(标题:四号仿宋加粗,顶格,行间距: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).
页脚内容4
1.初始化:
2.功能控制:
页脚内容5
图1-2页脚内容6
图1-3页脚内容7
图1-4页脚内容8
3.ping:
页脚内容9
图1-5 4.main()函数:
图1-6
三、详细设计
要实现ping程序,需要实现以下步骤:
页脚内容10
1.初始化
//定义IP首部格式
typedef struct _IPHeader
{
u_char VIHL; //版本和首部长度
u_char ToS; //服务类型
u_short TotalLen; //总长度
u_short ID; //标识号
u_short Frag_Flags; //片偏移量
u_char TTL; //生存时间
u_char Protocol; //协议
u_short Checksum; //首部校验和
struct in_addr SrcIP; //源IP地址
struct in_addr DestIP; //目的地址
}IPHDR, *PIPHDR;
//定义ICMP首部格式
页脚内容11
typedef struct _ICMPHeader
{
u_char Type; //类型
u_char Code; //代码
u_short Checksum; //首部校验和
u_short ID; //标识
u_short Seq; //序列号
char Data; //数据
}ICMPHDR, *PICMPHDR;
//定义ICMP回应请求
typedef struct _ECHOREQUEST
{
ICMPHDR icmpHdr;
DWORD dwTime;
char cData[REQ_DATASIZE];
}ECHOREQUEST, *PECHOREQUEST;
页脚内容12
//定义ICMP回应答复
typedef struct _ECHOREPLY
{
IPHDR ipHdr;
ECHOREQUEST echoRequest;
char cFiller[256];
}ECHOREPLY, *PECHOREPLY;
2.功能
//计算校验和函数
u_short checksum(u_short *buffer, int len)
//发送回应请求函数
int SendEchoRequest(SOCKET s, struct sockaddr_in *lpstToAddr)
//接收应答回复并进行解析函数
DWORD RecvEchoReply(SOCKET s, LPSOCKADDR_IN lpsaFrom, u_char *pTTL) 3.ping程序
//创建原始套接字,ICMP类型实现ping
页脚内容13
rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);//第二个注释函数socket if (rawSocket == SOCKET_ERROR)
{
printf("socket() error:%d\n", WSAGetLastError());
return;
}
四、结果分析(或测试)
1.输入ping主机的命令
页脚内容14
2.输入ping-t命令
3.输入外部网主机命令
页脚内容15
五、总结
刚刚拿到课题时,我对于ping几乎没什么了解。在课程设计过程中遇到过很多一开始看似不可克服的难题。回顾这次课程设计,我感慨颇多。在这段时间内,需要经常从电脑上查询资料,但是这不仅可以帮助我巩固曾经学习过的知识,也让我增长了许多课本上学不到的的知识。在这个过程中,我独立思考的能力得到了很大地提高,更重要的是我也学到了更多学习的方法,让我受益匪浅。同时我也明白查阅资料的重要性,在信息多元化的今天,我们不可能掌握所有的知识,但是面对的复杂的情况又要求我们掌握一些自己专业知识之外的内容,这时候就需要掌握正确的相关信息,学会求助书籍或者网络等是必不可少的。查阅资料也使我们做的一切有理可依,而不是凭空想象。
通过这次课程设计我发现了自身存在的许多不足之处,自己感觉理论上已经掌握的东西,却不真正了解它的内涵和工作原理,需要经过一番努力才能解决存在的困惑。这也很大地激发了我以后努力学习的兴趣。通过这次设计,我懂得了学习的重要性,学会了坚持、耐心和努力,为自己以后的学习和工作做最好的铺垫。
参考文献
1. Visual C++网络通信编程实用案例精选(第二版)曹衍龙编著;
2. Visual C++网络程序设计实例详解张越编著
页脚内容16