ping程序的设计与实现
Ping 程序设计原理(2023最新版)
Ping 程序设计原理
⒈引言
本文档旨在介绍 Ping 程序设计原理,包括其概述、设计原则
和实现细节。Ping 是一种网络工具,用于测试主机之间的网络连通性。本文将讨论 Ping 的基本原理、实现方法以及使用示例。
⒉概述
Ping 是一种基于 ICMP(Internet Control Message Protocol)的网络工具,它通过向目标主机发送 ICMP 回显请求消息(Echo Request)并等待目标主机的 ICMP 回显应答消息(Echo Reply)来测试主机之间的连通性。
⒊设计原则
在设计 Ping 程序时,需要考虑以下原则:
- 网络层协议:Ping 使用 ICMP 协议进行通信,所以需要对ICMP 协议进行理解和实现。
- 数据包处理:Ping 程序需要构造 ICMP 回显请求消息,并解析目标主机的 ICMP 回显应答消息。
- 超时机制:Ping 程序需要设置合理的超时时间,如果在超时时间内未接收到回显应答,则认为连接超时。
- 循环测试:Ping 程序可以通过循环发送 ICMP 回显请求消息来进行连通性测试。
⒋实现细节
⑴ ICMP 协议
ICMP 是一种网络层协议,用于在 IP 网络中传递错误消息和操作性消息。在 Ping 程序中,我们使用 ICMP 协议来进行主机之间的连通性测试。
⑵构造 ICMP 回显请求消息
Ping 程序在发送 ICMP 回显请求消息时,需要构造相应的数据包。构造 ICMP 数据包过程需要设置以下字段:
- 类型:设置为 8,表示 ICMP 回显请求消息。
计算机网络课程设计实验报告
计算机网络课程设计报告
姓名:
学号:
班级:
指导老师:
湖南科技大学计算机科学与工程学院
2013年6月
实验一
1。实验名称:网络聊天程序的设计与实现
2。实验目的:通过本实验能够了解socket通信的原理并在此基础上编写一个聊天程序了解TCP/IP的基础知识,发现TCP与UDP的优缺点以及在网络通信的应用.
3.实验原理:从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的两个主机使用网络的核心部分进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。从IP层来说,通信的两端是两个主机,IP数据报的首部明确的标志了这两个主机的IP地址.但是严格的讲,两个主机进行通信就是两个主机中的应用进程互相通信。根据应用程序的不同需求,运输层需要有两种不同的运输协议,即是面向连接的TCP和无连接的UDP。在使用这两个协议时运输层向高层用户屏蔽了下面的网络核心的细节,它使应用进程看见的就是好像在两个运输层实体间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别.当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道.由于我在课程设计中采用的是UDP协议进行通信的,这里就只简述一下一些关于UDP的内容,UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠的交付,但在某些情况下UDP却是一种最有效的工作方式.为此当我们使用UTP协议使两个计算机中的进程要互相通信,不仅必需知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。我们的计算机通信时采用客户—服务器方式。客户在发起通信请求时,必需先知道对方的服务器的IP地址和端口号,因此通过IP地址和端口号我们就能将两台主机连接起来,然后通过输入输出流将信息发送到对方的主机上。这样就能实现网络的聊天程序。
计算机网络课程设计(ping)
计算机网络课程设计
Ping程序设计(后附源码)
四川大学
黄昊
1143041195
一.设计目标
二.ICMP包结构
三.校验和计算
四.代码实现
a)ICMP封包
b)ICMP包转换成字节数组
c)域名解析、选择IPv4地址
d)原始套接口
e)计算校验和
五.运行结果
六.总结
一、设计目标
本程序设计实现基本的ping程序功能,包括域名解析,ICMPv4回显包发送,统计丢失率等功能。
二、ICMP包结构
ICMP包包含在IP包结构之内,是去除IP包头的部分,C#提供的Raw Socket功能可以实现包装ICMP结构,但自动包含IP包头等结构。
ICMP包由1Byte类型、1Byte SubCode、2字节校验和、2字节标示符、2字节序号,若干字节数据组成。其结构图如下:
4Byte
类型号8 、子代码表示ICMP回显功能,默认标示符45、序号0、Data小节可填充数据,本程序填充了ASCII码‘a’十六进制61,填充24字节,所以整个包大小共32字节。
三、校验和计算
对于ICMP包中的校验和,首先将校验和填0之后再整体计算。计算时,按照2字节为一个单位累加,最后将所有溢出结果再次做加法,最后整体取反,返回一个2字节长的校验和。
具体计算方法伪代码如下:
Int32 cksum = 0;
for (int i = 0; i < 16; i++)
{
cksum += ConvertToUInt16(packet, i * 2);
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >> 16);
PING和TCP网络系统
+ PING和TCP网络系统
Ping命令是使用最频繁的一个网络测试命令,它能够
测试一个主机到另外一个主机间的网络连接是否连通。在
微软的Windows系统内自带了一个Ping命令工具,可用
于实现网络方面的多个连接。TCP即文件传输协议,是一
种面向链接的传输层协议。
在本章的内容中,将分别介绍使用C语言开发一个类
似Windows系统中Ping工具和TCP工具的方法,并详
细介绍其具体的实现流程,让读者体会C语言在网络编程
领域中的应用。
______________________________________________ ______________________________________________
3.1 求职路
2006年7月2日,酷暑难耐
从今天开始,我的学生生涯就告一段落了。
3.1.1 写求职信
2006年7月4日,炎热的夏天,很多招聘版
不知从何时起,招聘广告占据了主流报纸的很大版面。我发现本地的时报、晚报和广播电视报,都专门推出了招聘版,并且占据了好几个版面。原来工作机会多多啊,当初还以为毕业意味着失业,看来我的顾虑是多余的。一大早我买了一份时报,耐心地浏览着招聘信息。
看完招聘信息后我失望了,报纸上自己感兴趣的信息很少,即使有也需要两年以上工作经验。真是为难啊,刚刚毕业,何来的工作经验?招聘程序员的也不少,但是一看就是小公司,像我这种拥有鸿鹄之志的热血才子,应该去像微软、Sun等级别的公司才是正道。
2006年8月4日,上午,多云间阴
不觉间一个月过去了,工作还是没有着落,毕业后待业在家的感受是很少人能体会到的。我很颓废,难道大学四年的苦读换来的是这种结果?我很不甘心。在家人和同学的鼓励下,继续开始了我的求职路。
纯Javascript实现ping功能的方法
纯Javascript实现ping功能的⽅法本⽂实例讲述了纯Javascript实现ping功能的⽅法。分享给⼤家供⼤家参考。具体实现⽅法如下:function ping(ip) {
var img = new Image();
var start = new Date().getTime();
var flag = false;
var isCloseWifi = true;
var hasFinish = false;
img.onload = function() {
if ( !hasFinish ) {
flag = true;
hasFinish = true;
img.src = 'X:\\';
console.log('Ping ' + ip + ' success. ');
}
};
img.onerror = function() {
if ( !hasFinish ) {
if ( !isCloseWifi ) {
flag = true;
img.src = 'X:\\';
console.log('Ping ' + ip + ' success. ');
} else {
console.log('network is not working!');
}
hasFinish = true;
}
};
setTimeout(function(){
isCloseWifi = false;
console.log('network is working, start ping...');
},2);
img.src = 'http://' + ip + '/' + start;
ping实验报告
沈阳工程学院
学生实验报告
实验室名称:信息工程系软件实验室
实验课程名称:计算机网络
实验项目名称:ICMP协议应用——Ping解析
班级:
姓名:
学号:
实验日期:2012年04月28日实验台编号:23指导教师:
批阅教师(签字):成绩:
图1 运行结果
Linux网络编程基础(4)--Ping的C代码实现
Linux⽹络编程基础(4)--Ping的C代码实现
1、背景
在进⾏⽹络编程的时候,通常使⽤的协议有TCP协议,UDP协议。这些协议在简历套接字之初需要制定套接字的类型,⽐如TCP应当设置为 SOCK_STREAM,
UDP对应的套接字应当设置为SOCK_DGRAM。但是这些套接字并⾮能够提供⽹络所需的全部功能,我们还需要其他的套接字,⽐如原始套接字OCK_RAW。原始
套接字可以提供SOCK_STREAM和SOCK_DGRAM所不及的能⼒。⽐如:
(1)有了原始套接字,进程可以读取ICMPV4、ICMPV6、IGMP等的分组。正如ping所使⽤的套接字,就是SOCK_RAW类型的。这样使得使⽤ICMP和IGMP的程
完全能够作为⽤户进程处理,⽽⽆需向内核添加代码。
(2)有了原始套接字,进程可以处理内核不处理其协议字段的IPV4数据报。
(3)有了原始套接字,进程使⽤IP_HDRINCL套接字选项定制⾃⼰的IPV4头部。
当然,上述的三个功能,并不是本⽂都要涉及的;只关注第⼀个能⼒,编写代码,实现ping程序。
2、基本使⽤
a.定义原始套接字与定义其他套接字没有形式上的巨⼤差别。
int sockfd;
sockfd = socket(AF_INET, SOCK_RAW, protocol);
protocol 的值是型为 IPPROTO_XXX的量,这些量定义在<netinet/in.h>中,⽐如ping使⽤的 IPPROTO_ICMP(关于IPV6的实现,再后续补充)。
只有超级⽤户才可以创建SOCK_RAW类型的套接字。
ping源代码
PING程序的设计
一、实验目的
PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。
课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。
二、实验内容和要求
1、RAW模式的SOCKET编程
PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。
熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等;
2、具体内容
1) 定义数据结构
需要定义好IP数据报、ICMP包等相关的数据结构;
2) 程序实现
在WINDOWS环境下实现PING程序;
3) 程序要求
在命令提示符下输入:
PING ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ
其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返
回4次响应。
返回信息的格式:
REPLY FROM ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ
或
REQUEST TimeOut (无法PING通的情况)。
三、实验主要仪器设备和材料
联网计算机。
四、实验方法、步骤及结构测试
实验按下述步骤进行:
1) 熟悉IP以及ICMP协议的工作机制
2) 熟悉RAW模式的SOCKET编程
3) 编写PING的实现程序
信息学院课程大纲-计算机网络(计算机科学与技术专业)
《计算机网络》教学大纲
课程名称:《计算机网络》
英文名称:Computer Network
课程性质:专业教育必修课程
课程编号:L131006
所属院部:信息科学与工程学院
周学时:4学时
总学时:60学时
学分:3.5学分
教学对象(本课程适合的专业和年级):
计算机科学与技术专业(本科)二年级学生
预备知识:C语言程序设计、计算机文化基础
课程在教学计划中的地位作用:
计算机网络是计算机技术和通信技术紧密结合并不断发展的一门学科。在当今这个网络化和信息化的社会中,计算机网络扮演了越来越重要的角色。计算机网络知识在一个人的知识结构中占有重要的地位,对一个人的自身发展也起着重要作用,更影响着一个国家的信息化水平。本课程是关于计算机网络技术基础知识的一门课程,为信息科学与工程学院计算机科学与技术专业、网络工程专业的一门专业必修基础课程。它是各专业后继课程的理论基础,是学生正确理解和实施网络设计、网络编程最重要的前导课程。教学方法:查找资料法;任务驱动教学法;案例教学法;自主探究法;讲解点拨法
教学目标与要求:
计算机网络在当今和未来社会的广泛性和重要性决定了本门课程在人才培养上的重要性。计算机网络是计算机专业学生的一门专业核心课程。
本课程的目的是使学生“懂原理、会应用”,通过学习,要理解计算机网络的运行机制,对计算机网络原理和技术有整体概念,掌握网络组建、管理和应用等方面的基础知识和基本技术,并能够理解与解决网络应用中碰到的实际问题。
本课程主要为培养两大类专业人才打基础:1.网络工程师—从事网络设计组建、维护管理、安全及应用等工作。2.软件工程师—在系统设计开发中会用到网络及网络编程的相关知识。计算机网络技术日新月异,通过本课程的学习,学生还要掌握计算机网络
ping命令的设计与实现
设计报告
课程计算机网络
设计名称《ping命令的设计与实现》
专业班级计科094 同组人姓名
同组人学号
实验日期2013-04-10 指导教师
成绩
2013 年 04 月 10 日
设计目的和要求
1、实验目的:
Ping命令向目的主机发送ICMP ECHO—REQUEST请求并接收目的主机返回的响应报文,用来检验本地主机和远程的主机是否连接。
2.实验要求:
利用ICMP数据包,测试主机的连通性,通过课程设计,使学生熟悉ICMP报文结构,使学生对ICMP有更深的理解。要求:输出参考系统自带ping程序,命令行运行:ping ip
二、设计说明
设计分析:
使用原始套接字可以读写ICMP分组,利用原始套接字发送ICMP回显请求,并接收ICMP 回显应答,通过icmp_send()发送ICMP回显示请求包,icmp_recv()接收ping目的主机的回复,并使用终端信号处理函数SIGINT处理信号,建立两个线程,一个用于发送数据,另一个用于接收响应数据,主程序等待两个线程运行完毕后再进行下一步动作。最后,主程序讲发送数据和接收的数据进行统计,并将结果打印出来。
系统运行环境:
虚拟机:Fedora14(linux操作系统) gcc
设计中的重点和难点:
ICMP数据包的打包和解包,以及从CRC16校验算法的分析实现
输入和输出条件:
在linux系统下运行ping 在出现4个响应包后按Ctrl+c键停止发送。
三、系统详细设计
《Ping命令的设计与实现》
Ping命令向目的主机发送ICMP ECHO—REQUEST请求并接收目的主机返回的响应报文,用来检验本地主机和远程的主机是否连接。
ping命令工作原理
ping命令工作原理
ping命令是一种常用的网络诊断工具,用于测试主机之间的连通性。它通过发送ICMP(Internet Control Message Protocol)回显请求消息到目标主机,并等待相应的回复消息来判断主机是否可达。
具体来说,ping命令工作原理如下:
1. 用户在命令行中输入ping命令,后面跟上目标主机的IP地址或域名。
2. 操作系统收到ping命令后,会构建一个ICMP回显请求消息,这个消息会包含一些必要的信息,如源IP地址、目标IP 地址、序列号等。
3. 操作系统通过网络接口将ICMP回显请求消息发送到目标主机。
4. 目标主机收到ICMP请求消息后,检查目标IP地址是否匹配,并生成一个ICMP回复消息作为响应。
5. 目标主机将ICMP回复消息通过网络接口发送回源主机。
6. 源主机接收到ICMP回复消息后,根据序列号等信息判断是否为对应的请求的回复,并将结果显示在命令行。
通过ping命令,我们可以看到目标主机是否能够回应,以及网络连接的延迟。如果成功收到ICMP回复消息,意味着主机可达;如果未收到回复,说明主机不可达或者网络连接存在问题。
需要注意的是,由于网络的复杂性和不稳定性,ping命令并不
完全可靠,可能会出现误报情况。此外,防火墙、路由器等网络设备也可能对ping命令进行过滤或限制,导致ping命令无法正常工作。
总的来说,ping命令工作原理简单明了,通过发送ICMP回显请求和接收回复来测试主机的连通性,是一种常用的网络故障诊断工具。
实验六基于ICMP协议的ping程序设计实验
实验六基于ICMP协议的ping程序设计实验
一、实验目的
⏹分析ICMP协议报文,理解和掌握ICMP协议报文头各字段的含义和作用;
⏹熟悉原始套接字编程;了解网络结构与网络传输底层协议。
二、实验时数:4小时
三、实验环境
⏹连通的局域网络、若干PC机、Windows XP /2000等操作系统、Visual C等编
程软件等。
四、实验要求
⏹掌握ICMP协议报文格式和各字段含义;
⏹在WINDOWS环境下设计与实现基于ICMP协议的PING程序,该程序可以
用于测试网络连通性。具体要求如下:
在命令提示符下输入:
PING ***.***.***.***
其中***为目的主机的IP地址;不要求支持域名,对是否带有开关变量也
不做要求,当不带开关变量时,要求返回4次响应。
返回信息的格式:
REPL Y FROM ***.***.***.***
或
REQUEST TimeOut (无法PING通的情况)
五、实验原理
1、PING的工作原理
ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。因此,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。
当传送IP数据包发生错误,比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前16bit就组成了ICMP所要传递的信息。
dev c++实现ping程序的设计与实现
要实现一个ping程序,首先需要了解ping程序的基本工作原理。ping程序通过向目标主机发送ICMP Echo请求并等待回应来检测网络连接。以下是使用C语言实现一个简单的ping程序的步骤:
1. 包含必要的头文件。
2. 定义一些常量和变量。
3. 编写一个函数,用于发送ICMP Echo请求。
4. 编写一个函数,用于接收ICMP Echo回应。
5. 编写主函数,解析命令行参数,调用上述函数进行ping操作。
以下是一个简单的C语言实现的ping程序示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <sys/socket.h>
#include <netinet/icmp.h>
#include <netdb.h>
#define MAX_PACKET_SIZE 65507
#define TIMEOUT 5
void send_icmp_request(int sockfd, struct sockaddr_in *dest_addr);
void receive_icmp_response(int sockfd);
int main(int argc, char *argv[]) {
ping实验报告
一.实验目的
PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。
课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。
二.实验内容和要求
1、RAW模式的SOCKET编程
PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP 协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。
熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等;
2.具体内容
2.1定义数据结构
需要定义好IP数据报、ICMP包等相关的数据结构;
2.2程序实现
在WINDOWS环境下实现PING程序;
2.3程序要求
在命令提示符下输入:
PING ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ
其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4次响应。
返回信息的格式:
REPLY FROM ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ
或
REQUEST TimeOut (无法PING通的情况)。
三.基本思路及所涉及的相关理论
3.1 功能模块设计
本系统共有 4 个模块,分别是初始化模块、功能控制模块、数据控制模块、数据报解读模块和ping测试模块.
3.1.1 初始化模块。改模块用于初始化各个全局变量,为全局变量赋初始值;初始化,加载库。
tracert_与_ping_程序设计与实现实验目的_概述说明
tracert 与ping 程序设计与实现实验目的概述说明1. 引言
1.1 概述:
本文旨在详细介绍tracert和ping程序的设计与实现以及相关实验结果分析。tracert和ping是常用的网络诊断工具,在网络故障排除和性能优化中起着重要作用。tracert用于跟踪数据包从源主机到目标主机的路由路径,可以帮助定位网络延迟和丢包问题的根源;ping则通过发送ICMP回显请求来测试目标主机的连通性,并计算往返时间(RTT)和丢包率。
1.2 文章结构:
本文共分为五个部分。引言部分对实验内容进行概述,说明文章结构,并明确目的。第二部分将详细介绍tracert和ping程序的设计与实现过程。第三部分将对tracert程序的实验结果进行分析,包括路由跟踪过程、延迟和丢包率等方面。第四部分类似地对ping程序进行结果分析,并比较两者之间的差异及讨论。最后一部分是结论部分,总结了实验成果并展望了未来研究方向。
1.3 目的:
本文旨在通过对tracert和ping程序设计与实现实验结果的详细分析,揭示这些网络诊断工具背后的原理和机制,以及它们在网络故障排除中的作用。通过本
实验可以更好地理解网络通信过程中的延迟和丢包问题,并为进一步优化网络性能提供指导意见。此外,本文还将展示程序设计和开发的一般方法和技巧,从而对读者在相关领域开展研究提供帮助。
2. 实验设计与实现:
2.1 tracert程序设计与实现:
在本实验中,我们着重研究和设计了tracert程序的实现。tracert程序是一个网络工具,用于追踪数据包从源主机到目标主机经过的路由路径。为了完成tracert 程序的设计和实现,我们需要遵循以下步骤:
基于icmp协议的ping程序设计,用java语言代码
基于icmp协议的ping程序设计,用java语言代码以下是使用Java语言实现基于ICMP协议的ping程序设计的示例代码:
```java
import ;
import ;
import ;
public class PingProgram {
public static void main(String[] args) {
String host = " // 目标主机名或IP地址
try {
InetAddress address = (host);
boolean isReachable = (5000); // 发送5个ICMP请求,超时时间为5000毫秒
if (isReachable) {
(host + " is reachable.");
} else {
(host + " is unreachable.");
}
} catch (UnknownHostException e) {
();
} catch (IOException e) {
();
}
}
}
```
在上述代码中,我们首先定义了目标主机名或IP地址。然后,我们使用
`InetAddress`类获取目标主机的IP地址,并使用`isReachable()`方法发送
5个ICMP请求,超时时间为5000毫秒。如果目标主机可达,则输出"主机可达";否则,输出"主机不可达"。注意,该方法可能会抛出
`UnknownHostException`和`IOException`异常,因此需要进行异常处理。
- 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