ImageVerifierCode 换一换
格式:DOC , 页数:36 ,大小:370.50KB ,
资源ID:5091306      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5091306.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络课程设计(PING程序代码和FTP)Word下载.doc)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

网络课程设计(PING程序代码和FTP)Word下载.doc

1、一、实验目的和要求实验目的: PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。实验内容和要求:1、RAW模式的SOCKET编程PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET

2、编程。熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等;2、具体内容1. 定义数据结构需要定义好IP数据报、ICMP包等相关的数据结构;2. 程序实现在WINDOWS环境下实现PING程序;3. 程序要求在命令提示符下输入: PING .其中为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4次响应。返回信息的格式: REPLY FROM .或 REQUEST TimeOut (无法PING通的情况)。二、实验环境Pc机一台(可以与其他机联通或者可以上网)操作系统为windows xp软件为vc6.0Windows 环境下三、实验方

3、法、步骤及结构测试实验按下述步骤进行:1) 熟悉IP以及ICMP协议的工作机制2) 熟悉RAW模式的SOCKET编程3) 编写PING的实现程序4) 编译环境中需要包括SOCKET库 WS2_32.lib5) 在模拟实现环境下调试并运行自己编写的PING程序6) 保留你实现的程序在你的用户目录下,以备辅导教师检查7) 最后提交源程序,撰写实验报告四、课程设计(论文)进程安排序号设计(论文)各阶段内容地点起止日期1了解实验内容,查找资料 实验室,图书馆12.222查找资料,了解各个函数的内容宿舍12.233调试,解决各段函数的错误,实现各项功能12.244小组交流,交换各自意见12.255答辩实

4、验室12.266完成设计报告,并加深对设计的了解12.27五、应收集的资料及主要参考文献1程良伦,网络工程概论,机械工业出版社,20072张越 等,Visual C+网络程序设计实例详解,人民邮电出版社,20063Andrew S Tanenbaum 著 潘爱民 译 ,计算机网络(第四版),清华大学出版社,20044谢希仁,计算机网络(第四版),电子工业大学,20065 王宏C编程设计方案教程清华大学出版社:2002:6 夏华香C#编程技巧具体案例解析中国电力出版社:2005:发出任务书日期:2008年 月 日 指导教师签名:计划完成日期: 2008年 月 日基层教学单位责任人签章:主管院长签

5、章:一、 ping的实现方法和方案: 1.1 ping的原理: Ping命令不仅存在Windows系统上,在Unix系统上也有Ping命令,其实对其他只要是支持网络的操作系统,一般也都存在该命令。Ping命令的主要作用是检测网络上主机的状态。要是在几年前,我们还可以下如此断言,如果不能Ping通某台主机,那么也就无法Telnet或者FTP到这台主机,但随着互联网的安全意识的增加,出现了访问控制清单的路由器和防火墙,由于ICMP报文是在IP数据包中被传输的,而到达一台主机不仅取决于IP层是否到达,还取决于使用何种协议和端口。譬如金山公司的金山网镖就可以禁止其他机器Ping通这台主机。所以在现在的

6、情况下,即时Ping不通某台机器,但也有可能FTP登陆到这台机器,或者通过HTTP来浏览这台机器上的Web页面 定义IP数据报、ICMP包等相关的数据结构如下: / IP 头结构typedef struct iphdr unsigned int h_len:4; / 首部长度 unsigned int version: / IP版本 unsigned char tos; / 服务类型 unsigned short total_len; / 包总长度 unsigned short ident; /标识符 unsigned short frag_and_flags; / 标志 unsigned c

7、har ttl;/ 生存周期 unsigned char proto; / protocol (TCP, UDP etc) 协议类型 unsigned short checksum; /IP检验和 unsigned int sourceIP;/源地址IP unsigned int destIP;/目的地址IPIpHeader;/ ICMP 头结构typedef struct icmphdr BYTE i_type;/类型 BYTE i_code; / 代码类型 USHORT i_cksum;/检验和 USHORT i_id;/地址 USHORT i_seq;/发送顺序 /* This is n

8、ot the std header, but we reserve space for time */ ULONG timestamp;/接受时间IcmpHeader;1.2设计方案:ping-n count -r count-n count 发送 count 指定的 ECHO 数据包数。默认值为 4。-r count 在记录路由字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。Ping的返回信息有Request Timed Out、Destination Net Unreachable和Bad IP address还有Source quench rece

9、ived。这个信息表示对方主机可以到达到TIME OUT,这种情况通常是为对方拒绝接收你发给它的数据包造成数据包丢失。大多数的原因可能是对方装有防火墙或已下线。这个信息表示对方主机不存在或者没有跟对方建立连接。这里要说明一下destination host unreachabletime out的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现,如果路由表中连到达目标的路由都没有,那就会出现 这个信息表示你可能没有连接到DNS服务器所以无法解析这个IP地址,也可能是IP地址不存在。信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应

10、。 开始结束iargc?if(*)switch()bRecordRoute=trueusage(*)datasize=atoi(argvi)ipdest=argvi1.3程序实现流程图如下: rdefault成立成立 否成立否否图(ValidateArgs)ptr/4?If(host)?Inaddr,h_nameinaddr成立不成立 成立Iphdrlen&!icmpcountDecodeIPoptions()bytesh_addr, hp-h_length);/创建首部长度的内存存储发送地址dest.sin_family = hp-h_addrtype;/设置系统主机系统套接字dest.si

11、n_addr = %sn, inet_ntoa(dest.sin_addr);/打印发送地址elsegethostbyname() failed:return -1;/ Create the ICMP packet/datasize += sizeof(IcmpHeader);icmp_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET); /为icmp_data分配内存recvbuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET); /为recv

12、buf分配内存if (!icmp_data)/判断分配内存是否成功HeapAlloc() failed:memset(icmp_data,0,MAX_PACKET);/把icmp_data内存清空FillICMPData(icmp_data,datasize);/调用函数填写ICMP包数据while(1)/用循环控制发送数量static int nCount = 0;/设置静态变量,记录发送报文的数量int bwrote;if (nCount+ = 4)/判断是否已经发送了4个报文,是的话退出整个循环break;(IcmpHeader*)icmp_data)-i_cksum = 0;/先把IC

13、MP的检验和置零timestamp = GetTickCount();/获取当前时间i_seq = seq_no+;/发送顺序加一i_cksum =checksum(USHORT*)icmp_data, datasize); /计算检验和bwrote = sendto(sockRaw, icmp_data, datasize, 0,(struct sockaddr*)&dest, sizeof(dest); 创建发送套接字if (bwrote = SOCKET_ERROR)/判断错误if (WSAGetLastError() = WSAETIMEDOUT)printf(timed outn);/判断超时错误continue;sendto() failed:/判断发送失败错误if (bwrote datasize)/比较发送数据报的大小Wrote %d bytesn, bwrote);/打印发送数据报的大小bread = recvfrom(sockRaw, recvbuf, MAX_PACKET, 0,(struct sockaddr*)&from, &fromlen); /创建接受套接字if (bread = SOCKET_ERROR)/判断失败原因/判断打印超时错误recvfrom() failed:/判断接收失败

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2