| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

计算机网络基础课程设计Ping程序的实现

文***品

贡献于2021-04-28

字数:7409



计算机网络工程课程设计报告

题 目: Ping程序实现
学生姓名:
学 号:
专业班级: 计科专业班
组姓名  
指导教师:
设计时间: 2013年学期第X周

指导老师意见:






评定成绩: 签名:
日期: 年 月 日

目录
课程设计目意义 2
二课程设计容求 2
1容: 2
2求: 2
三课程设计相关技术 2
四课程设计程 2
1Ping模块 2
2功控制模块 4
3数报解析模块 5
五课程设计结 6
六参考文献 7
七附 录(程序清单) 7
八心体会 11

课程设计目意义
利ICMP数包C语言实现Ping命令程序实现基Ping操作发送ICMP回显请求报文测试—机机间连通情况通程序训练学生熟悉ICMP报文结构学生ICMP更深理解掌握Ping程序设计方法掌握网络编程方法技巧编写出功更强程序
二课程设计容求
1容:
C语言实现Ping命令程序实现基Ping操作发送ICMP回显请求报文测试—机机间连通情况
2求:
1) 独立完成程序设计编码调试
2) 系统利C语言实现程序调试环境Turbo CVC
3) 课程设计规范书写课程设计报告
4) 采VC环境进行调试运行
三课程设计相关技术
Ping程序面户应程序该程序ICMP封装机制通IP协议工作实现直接IPICMP包进行操作实验中RAW模式socket编程首先定义IP数报首部IP数报基础定义ICMP数报首部初始化全局变量接着定义填充ICMP数报字段函数FillICMPData()校验函数checksum()解读ICMP报首部函数DecodeICMPHeader()释放资源函Cleanup()函数通调函数实现Ping命令功IP头ICMP头设置分参RFC791RFC792标准包含必信息程序设置main()函数函数库函数实现套接字编程数包发送接收中数包发送调sendto()数包接收调recvfrom( )发送数包时会遇阻塞者目标机通造成超时需发送数包调函数判断否超时处调库函数setsockopt()实现超时判断次校验函数采移位方法进行计算
套接字需文件头文件Winsocket2h库文件WS2_32LIB动态库W32_32DLL创建套接字时候参数创建套接字前必须首先WSAStartup函数
四课程设计程
1Ping模块
Ping()函数程序核心部分基调模块函数实现终功布骤包括:定义初始化全局变量开socket动态库设置接收发送超时值域名址解析分配存创建初始化ICMP报文发送ICMP请求报文接收ICMP 应答报文解读应答报文输出Ping结果释放占资源流程页图21示
注释:
(1) 该模块非处理包括判断输出判断结果含义
(2) 程序没运行次输出四行结果(前提输入址效)欲次PING址必须重新启动程序
(3) 输入时输入目标机名然ping结果TIMEOUT
开始
定义初始化全局变量
判断WSAStartup函数否调成功
输出调失败

创建套接字设置socket接收超时发送超时选项

输入PINGIP址
解析输入容设置PING参数
创建填充ICMP数报文
判断否已发送四次
Break
发送接收解析数包
输出PIING结果

结束
清残余


2功控制模块
功控制模块模块提供调函数该模块包括参数获取功计算ICMP数报文检验清SOCKETICMP包数接受缓区占资源释放功显示尸帮助功该模块包含三函数实现流程图22示
Checksum开始
定义初始化cksum
(size > 1)
确定cksumsize

if (size)
计算校验cksum获结果
cksum + *(UCHAR*)buffer

结束
Cleanup开始
if (m_hSocket INVALID_SOCKET)
关闭套接字
释放占资源
清ICMP包数接受缓区
F
WSACleanup()
结束

图22 功控制模块
注释:
aillICMPData系列初始化语句流程图中画出
bCleanup()函数中WSACleanup()HeapFree()closesocket()库函数checksum()校验函数冗余校验种形式 通错误检测方法空间(通信)者时间(计算机存储)传送数完整性进行检查种简单方法
3数报解析模块
数报解析模块提供解读IP选项解读IcMP报文功机收目机返回1cMP回显应答报文开始逐解读IcMP报文果需记录路情况IcMP解析函数调IP选项解读函数实现IP路输出(程序没功该模块DecodeICMPHeader函数实现中间会调模块相应函数流程图图23
注释:
a判断否数报回应前判断回应少容语句未呈现出
b函数GetTickCount()记录时机处现时间(毫秒级)
DecodeICMPHeader开始
定义相关变量初始化
tick GetTickCount()
回应报文

输出
tick0[icmpcount]tick icmphdr>timestamp
判断时间否1ms
printf(Reply from s dytesd time<1ms icmp_seq d\ninet_ntoa(from>sin_addr) bytes icmphdr>i_seq )
printf(Reply from s dytesd timed icmp_seq d\ninet_ntoa(from>sin_addr) bytestick0[icmpcount] icmphdr>i_seq)


icmpcount++
结束
结束


图23 数报解析模块
五课程设计结
1运行操作结果:vc里运行界面:


2输入机ip址:

3输入网ip结果:

4 网络连通时会出现图结果


六参考文献
1Visual C++网络通信编程实案例精选(第二版)曹衍龙 刘海英 编著
2Windows网络编程技术 (美)
七附 录(程序清单)
#pragma comment(libws2_32lib)
#include 创建套接字头文件
#include
#include 标准输入输出函数
#include 实程序库函数
#include
typedef struct iphdr
{
unsigned int h_len4 头长度
unsigned int version4 IP版
unsigned char service 服务类型
unsigned short total_len 包总长度
unsigned short ident 包标示身份
unsigned short frag_and_flags 标志
unsigned char ttl 包生命周期
unsigned char proto 协议类型
unsigned short checksum IP 校验
unsigned int sourceIP 源IP
unsigned int destIP 目标IP
} IpHeader
#define ICMP_ECHO 8 ICMP报文类型回显请求
#define ICMP_ECHOREPLY 0 ICMP报文类型回显应答
#define ICMP_MIN 8 ICMP数报
typedef struct icmphdr
{
BYTE i_type ICMP报文类型
BYTE i_code 该类型中代码号
USHORT i_cksum 校验
USHORT i_id 惟标识符
USHORT i_seq 序列号
ULONG timestamp 时间戳
} IcmpHeader
#define DEF_PACKET_SIZE 32 默认数报
#define MAX_PACKET 1024 ICMP数报
#define MAX_IP_HDR_SIZE 60 IP头长度
初始化全局变量
int datasizeDEF_PACKET_SIZE
char *icmp_dataNULL
char *recvbufNULL
SOCKET m_hSocket INVALID_SOCKET
char *lpdestNULL
填充ICMP数报字段函数
void FillICMPData(char *icmp_data int datasize)
{
IcmpHeader *icmp_hdr NULL
char*datapart NULL
icmp_hdr (IcmpHeader*)icmp_data
icmp_hdr>i_type ICMP_ECHO
icmp_hdr>i_code 0
icmp_hdr>i_id (USHORT)GetCurrentProcessId()
icmp_hdr>i_cksum 0
icmp_hdr>i_seq 0
datapart icmp_data + sizeof(IcmpHeader)
}
校验函数
USHORT checksum(USHORT *buffer int size)
{ unsigned long cksum0
while (size > 1)
{ cksum + *buffer++ size sizeof(USHORT) }
if (size)
{ cksum + *(UCHAR*)buffer }
cksum (cksum >> 16) + (cksum & 0xffff)
cksum + (cksum >>16)return (USHORT)(~cksum)
}
解读ICMP报首部函数
void DecodeICMPHeader(char *buf int bytes SOCKADDR_IN *from)
{
IpHeader*iphdr NULL
IcmpHeader*icmphdr NULL
unsigned short iphdrlen
DWORD tick
static int icmpcount 0
iphdr (IpHeader *)buf
iphdrlen iphdr>h_len * 4
tick GetTickCount()
if (bytes < iphdrlen + ICMP_MIN)
{ printf(Too few bytes from s \r\ninet_ntoa(from>sin_addr)) }
icmphdr (IcmpHeader*)(buf + iphdrlen)
if (icmphdr>i_type ICMP_ECHOREPLY)
{ printf(nonecho type d received \r\n icmphdr>i_type) }
if (icmphdr>i_id (USHORT)GetCurrentProcessId())
{ printf(程序回应报文 \t错误代码 d\n WSAGetLastError()) }
DWORD tick0[4]
tick0[icmpcount]tick icmphdr>timestamp
if(tick0[icmpcount]<1)
printf(Reply from s bytesd time<1ms
icmp_seqd\ninet_ntoa(from>sin_addr) bytes icmphdr>i_seq )
else
printf(Reply from s bytesd timedms icmp_seq d\ninet_ntoa(from>sin_addr) bytestick0[icmpcount] icmphdr>i_seq)
icmpcount++
}
释放资源函数
void Cleanup()
{
if (m_hSocket INVALID_SOCKET)
closesocket(m_hSocket)
HeapFree(GetProcessHeap() 0 recvbuf)
HeapFree(GetProcessHeap() 0 icmp_data)
WSACleanup()
}
函数
void main()
{
WSADATA wsaData char a[100] printf(ping )
scanf(sa) lpdesta SOCKADDR_IN m_addrDest结构体
SOCKADDR_IN m_addrFrom int timeout1000 USHORT seq_no0
if (WSAStartup(MAKEWORD(2 2) &wsaData) 0)
{ printf(Sorry you cannot load socket dll) }
m_hSocket WSASocket (AF_INET SOCK_RAW IPPROTO_ICMP NULL 0WSA_FLAG_OVERLAPPED)创建原始套接字该套接字ICMP协议
if (m_hSocket INVALID_SOCKET) 果套接字创建成功
{ printf(socket 创建失败) }
int bread setsockopt(m_hSocket SOL_SOCKET SO_RCVTIMEO (char*)&timeout sizeof(timeout))设置接收超时值
if(bread SOCKET_ERROR)
{ printf(设置socket接收超时选项错误) }
timeout 1000
bread setsockopt(m_hSocket SOL_SOCKET SO_SNDTIMEO (char*)&timeout sizeof(timeout))设置发送超时值
if (bread SOCKET_ERROR)
{ printf(设置socket发送超时选项错误) }
memset(&m_addrDest 0 sizeof(m_addrDest)) 0初始化目址
m_addrDestsin_family AF_INET设置址族里表示IP址族
if ((m_addrDestsin_addrs_addr inet_addr(lpdest)) INADDR_NONE)址转化
{
struct hostent *hp NULL
if ((hp gethostbyname(lpdest)) NULL) 名字解析根机名获取IP址
{
memcpy(&(m_addrDestsin_addr) hp>h_addr hp>h_length)获取IP值赋目址中相应字段
m_addrDestsin_family hp>h_addrtype 获取址族值赋目址中相应字段
}
else
{
printf(找名 s 机\t错误代码 d\nlpdest exit(0)
} }
printf(Pinging s with 64 bytes of data \n\n inet_ntoa(m_addrDestsin_addr))
datasize + sizeof(IcmpHeader) 数报文需包含ICMP报头
根默认堆句柄堆中分配MAX_PACKET存块新分配存容初始化0
icmp_data(char*)HeapAlloc(GetProcessHeap()HEAP_ZERO_MEMORYMAX_PACKET)
recvbuf (char*) HeapAlloc(GetProcessHeap() HEAP_ZERO_MEMORYMAX_PACKET)
if (icmp_data) 果分配存成功
{ printf(堆分配错误) }
memset(icmp_data0MAX_PACKET)创建ICMP报文
FillICMPData(icmp_datadatasize)
开始发送接受ICMP包
int nCount0
while(1)
{ int bwrote
if(nCount++ 4)
break超指定记录条数退出
((IcmpHeader*)icmp_data)>i_cksum 0计算校验前校验字段设置0
((IcmpHeader*)icmp_data)>timestamp GetTickCount()获取操作系统启动现毫秒数设置时间戳
((IcmpHeader*)icmp_data)>i_seq seq_no++设置序列号
((IcmpHeader*)icmp_data)>i_cksum checksum((USHORT*)icmp_data datasize)计算校验
bwrote sendto(m_hSocket icmp_data datasize 0 (struct sockaddr*)&m_addrDest sizeof(m_addrDest))开始发送ICMP请求
if (bwrote SOCKET_ERROR)果发送成功
{
if (WSAGetLastError() WSAETIMEDOUT) 果超时成功
{ printf(Requrest timed out \r\n) continue }
printf(目标达\t错误代码 d\n WSAGetLastError())发送成功原
continue }
if (bwrote < datasize)
{ printf(Wrote d bytes \r\n bwrote) }
int fromlen sizeof(m_addrFrom)开始接收ICMP应答
breadrecvfrom(m_hSocketrecvbufMAX_PACKET0(struct sockaddr*)&m_addrFrom &fromlen)
if (bread SOCKET_ERROR)果接收成功
{
if (WSAGetLastError() WSAETIMEDOUT) 果超时成功
{ printf(Requrest timed out \r\n) continue } printf(接收数函数调错误\t错误代码 d\n WSAGetLastError())接收成功原
exit(0)
}
DecodeICMPHeader(recvbuf bread &m_addrFrom)解读接收ICMP数报
} Cleanup()
}
八心体会
次课程设计课题ping程序实现前实验课局域网中通路器交换机等设备
文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

Ping程序的设计与实现课程设计

 计算机网络课程设计报告设计名称 Ping程序的设计与实现 专业班级 同组人姓名 指导教师 成 绩 一、设计目的和要求1、实验目的 利用ICMP数据包、C语言实现

文***享 3年前 上传627   0

ping程序课程设计实验报告

Windows网络程序设计课程设计 课 程 名 称 ping程序设计 姓   名 系 别 、专 业 计算机科学系网络工程班 导师姓名、职 称

文***品 2年前 上传479   0

实现产品的策划程序

SBM 公 司 SBM-QMD-71000 版次:B 密级:□ 保密 □ 通用 实现产品的策划程序 Planning of Product Realization 本程序属SBM公司所有,未经书面许可, 不得以任何形式复印或传播。

苏***振 10年前 上传29953   0

查找算法的程序实现「学生版」

查找算法的程序实现【学生版】【例1】 在数组元素a(1)到a(8)中查找键值为key的数,其顺序查找的VB程序段如下,请在划线处填写正确的语句。for i=1 to 8if ①        then   Text1.text=str(i)  exit forend ifnext iif ②        then text1.text=″在数组中没有找到″+str(key)

文***7 2年前 上传512   0

基础工程课程设计桩基础设计

基础工程课程设计名 称:桩基础设计 姓 名: 班 级: 学 号: 指导老师:桩基础设计题高层框架结构(二级建筑)的某柱截面尺寸为1250×850mm ,该柱传递至基础顶面的荷载为:F=9200kN ,M=410kN∙m ,H=300kN ,采用6-8根

z***u 2年前 上传426   0

基于MATLAB的ASK调制解调实现课程设计

大学《通信原理》课程设计报告学 院 专 业 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 2016年X月X

文***品 3年前 上传727   0

《计算机网络基础论文》

计算机网络基础论文随着计算机技术和网络技术在世界范围内不断普及,人类社会已经开始步入计算机网络时代。随着人类新的发展时期的到来,计算机和互联网将会带给社会怎样的变化将是我们今后十分关注的问题。本文主要对计算机网络      随着信息技术的迅猛发展,计算机网络的应用已经深入到人们日常生活的每一个角落,涉及到社会的各个方面,其影响之广、普及之快是前所未有的。宽带网络的蓬勃发展更是让人们欣喜地

雅***韵 2年前 上传1158   0

计算机网络编程课程设计

课题一:基于TCP的Socket通讯编程一、 课程设计目的:1. 能够深刻了解socket编程思想;2. 从实现层面理解TCP和UDP链接的不同。二、 课程设计环境:1. windows XP或 win7 系统;2. 配置有java虚拟机的环境变量;3. 编写java程序的软件Eclipse。三、 课程设计原理: Windows Sockets规范本意在于提供给应用程序开发

文***品 3年前 上传541   0

计算机网络工程课程设计报告(园区网)

网络工程实践 课程设计报告课 题: 园区网设计 姓 名: ########### 学 号: ############ 同组姓名: ######################### 专业班级: ########################指导教师:

文***品 3年前 上传770   0

查找算法的程序实现「教师版」

查找算法的程序实现【教师版】【例1】 在数组元素a(1)到a(8)中查找键值为key的数,其顺序查找的VB程序段如下,请在划线处填写正确的语句。for i=1 to 8if ①        then   Text1.text=str(i)  exit forend ifnext iif ②        then text1.text=″在数组中没有找到″+str(key)

文***7 2年前 上传419   0

微信旅行小程序的设计与实现

旅游行业,随着经济的快速发展,呈现出一片欣欣向荣的画面,特别是在这两年的发展之中,各行各业都在互联网的快速发展之中都展现出了运用技术手段来解决传统的线下宣传的弊端,这也是必然的趋势。

爱***享 3年前 上传2096   0

程序设计基础

程序设计基础 下面我们这一节我们概要向用户管理人员介绍面问过程的程序设计语言的原理。绝大多数生产程序是用诸如COBOL、BASIC这样的POL编制的。虽然用户管理人员通常没有机会去实际地从事这类编程序的工作,但是他(或者她)将经常与从事这些工作的人们相互联系。掌握程序设计的基础知识将使得这种相互联系更加有效,同时也使得管理人员能够理解查询语言的概念。 在POL中,一个指令

r***子 14年前 上传13412   0

电气工程基础课程设计 (1)

 电气工程课程设计说明书 题 目: 化纤厂降压变电所电气设计 院 (系): 机械工程学院 专 业: 电气工程及其自动化 学生姓名:

文***品 1年前 上传437   0

桩基础课程设计计算书

 基 础 工 程 课程设计任务书 题 目 名 称 桩基础设计 课 程 名 称 基础工程 学 生 姓 名 学 号

文***品 5年前 上传1869   0

基础工业工程课程设计

课 程 设 计 报 告 级 工业工程 专业 班级课程名称 基础工业工程课程设计 题 目 纸篮子生产线的工作研究与改进 姓 名 学号 指导教师 职称 讲师 二О一一年 X月 X日课 程 设 计 报 告 01.课程设计简介 21.1选题背景 21

文***享 11个月前 上传240   0

电气工程基础课程设计报告

 电气工程基础课程设计 课程设计(论文)设计(论文)题目 电气控制实验柜的安装 学院名称 核技术与自动化工程学院 专业名称

z***u 1年前 上传402   0

柱下独立(联合)基础设计课程设计

 课 程 设 计 任 务 书设计题目柱下独立(联合)基础设计学生姓名所在院部土木与建筑工程学院专业、年级、班土木工程设计要求: 按照以下所给资料进行基础设计。1、设计资料(1)上部结构资料:上部结构为多层全现浇框架结构,框架柱截面尺寸为600 mm×600 mm,室外地坪标高同自然地面,室内外高差450mm。柱网布置见图1。图1 柱网布置图(2)

文***品 2年前 上传432   0

柱下独立基础课程设计

目 录1 柱下独立基础课程设计 11.1设计资料 11.1.1地形 11.1.2工程地质条件及岩土设计 11.1.3岩土设计参数 11.1.4水文地质条件 21.1.5上、下部结构材料 21.1.6材料 21.1.7本人设计资料 21.2独立基础设计 31.2.1选择基础材料 31.2.2选择基础埋置深度 31.2.3求地基承载力特征值 31.2.4初步选择基底尺寸

文***品 4年前 上传772   0

机械设计基础课程设计

设计带式输送机的传动系统,工作时有轻微冲击,输送带允许速度误差±4%,二班制,使用期限12年(每年工作日300天),连续单向运转,大修期三年,小批量生产。

如*** 4年前 上传1172   0

电气工程基础课程设计

 电气工程基础 课程设计(论文)设计(论文)题目 电气控制实验柜的安装 学院名称 核技术与自动化工程学院 专业名称

文***品 1年前 上传358   0

图书馆程序设计程序设计综合课程设计报告

XX学院计算机科学与技术系信息管理与信息系统专业《程序设计综合课程设计》报告 (2010/2011学年 第一学期)学生姓名: 学生班级: 信息管理与信息系统学生学号: 指导教师: 2010年 月 日目 录课程设计的目的....................

文***品 2年前 上传559   0

设计散列表实现电话号码查找系统数据结构课程设计

XX学院课程设计报告书专 业:计算机科学与技术 课程设计名称:《数据结构课程设计》题 目:设计散列表实现电话号码查找系统班 级: 学    号: 姓    名: 同 组 人 员: 无指 导 老 师: 完 成 时 间: 摘要电话号码的查找系统软件是现在很实用工具,随着时代的发展,信息化得发

文***品 2年前 上传581   0

进程调度算法的实现计算机操作系统课程设计

题目2 进程调度算法的实现2.1 题目的主要研究内容及预期达到的目标(1)设计进程控制块; (2)设计多个进程队列; (3)设计多个进程(≥20); (4)动态生成时间片、执行时间和优先级,将这些信息输出至文件中; (5)设计基于时间片的多优先级调度算法; (6)动态调度,并把所有调度信息输出至文件中。(7)理解进程调度相关理论;(8)掌握时间片调度原理;(9)掌握高优先级

文***品 3年前 上传586   0

编译原理课程设计报告 简单编译器的设计与实现

 编译原理课程设计 ——简单编译器的设计与实现 班 级: 组长: 组员: 指导教师: 设计时间: 姓名 分工 组长: 语法分析部分,语义分析和中间代码生成部分,符号表的管理,目标代码的生成,数据结构的设计和总体框架的设计。 组员: 中间代码优化部分,负责从DAG图中获得优化后的四元式代码,以及

文***享 5年前 上传1880   0

通信原理课程设计PAM调制与解调系统的MATLAB实现及性能分析

PAM的调制与解调目录摘要 引言 1.1 课程设计目的 1.2 课程设计内容 2.1 PAM调制信号的频谱 2.2 PAM调制过程的波形和频谱图 3.1正弦波矩形抽样 3.2矩形波调制 3.3 矩形波抽样后解调 3.4矩形波解调 结束语摘要在通信系统中,调制与解调是实现信号传递必不可少的重要手段。所谓调制是用一个信号去控制另一个信号的某个参量,产生已调制信号。解

文***享 1年前 上传383   0