ping程序的设计与实现
用Jpcap和Java实现图形化的Ping程序

1
23453 简介
2565 语言的标准包 7565, .89 提供了 :)+ ; <=+ 传输方面的接口 > 但对网络模型中网络层及数据链路层却 未提供相应的类来进行控制 > 必须使用 2?( 技术 > 使用本地操作系统的 @A)BC: 接口 , 而 23453 扩展包却提 供了这方面需求的支持 , 23453 是一个用来捕获和发送各种类型网络数据包的 2565 库 , 通过 23453> 可以用 2565 语言开发基于网络接口的抓包分析程序 , 23453 可以捕获以太网包 > (+ 包 > DE+ ; EDE+ 包 > :)+ ; <=+ 包 及 ()*+ 包 , 23453 是一个中间件 > 通过调用 F-.3453 ; G-H453 给 2565 提供一个公用接口 > 实现了平台无关性 , 23453 已经在常见操作系统平台# 如 F-.IJKL> G-.MN> *54 A@ 等$ 上经过测试, 3.1 Jpcap 种类 目前有两种同名的 23453> 一种是 LJMO48PJO/8 提供的> 其网址是 Q993R ; ; LJMO48PJO/8, .89 ; 3OJ7849L ; 73453 ; > 一种是 B8-95 SM7-- 提供的 > 其网址是 Q993R ; ; .89O8L85O4Q, -4L, M4-, 8IM ; TPM7-- ; 73453 ; IJ4 ; -.I8N, U9VW > 本文用 的 23453 是后者 , 3.2 Jpcap 主要类和接口 0$ ?89KJOT(.98OP548 类, 代表网络接口> 如以太网卡, 该类直接从 AH7849 类派生 > 有一些描述网络接口的属 性 > 如 *D) 地址 > 链接名及链接描述等 , %$ 23453)539JO 类, 此类用来捕获和读取网络数据包 , 该类一个实例代表建立了一个与指定设备的链接 > 可以通过该类的实例来控制设备 > 例如设定网卡模式、 设定过滤关键字等等 , $ 类 此类专门用于网络数据包的发送 1 23453@8.I8O , , "$ +54T89 类及其子类 , +54T89 类是所有 23453 支持的数据包类的父类 , 包括 DE++54T89> ()*++54T89> (++54T89> :)++54T89 和 <=++54T89, !$ +54T89E848-68O 接口 , 用来定义一个方法去分析已经捕获的数据包 , 方法名是 O848-68+54T89> 该方法在 每捕获一个数据包时都会被调用 , 以上只给出了本程序中用到的主要类> 详细的说明见文献 X Y Z , 3.3 Jpcap 在 Windows 上的安装 23453 在常见操作系统平台上都有安装程序 > 这里只介绍在 F-.IJKL 平台上的安装方法 , 安装共有三个 步 骤 > 首 先 下 载 并 安 装 2=B[> 若 只 想 运 行 基 于 23453 的 应 用 程 序 > 则 可 只 安 装 2EC[\ 其 次 下 载 并 安 装 F-.+453\ 最后下载并安装 23453 本身 , 注意每个下载和安装的软件都是 PJO F-.IJKL 的,
计算机网络课程设计实验报告

计算机网络课程设计报告姓名:学号:班级:指导老师:湖南科技大学计算机科学与工程学院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地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。
完成ping的功能,能够方便的设置与ping指令相关的参数

一、任务概述及需求分析○1编写一个网络应用程序。
○2基本要求:完成ping的功能,能够方便的设置与ping指令相关的参数(至少两项参数:-n count和-l size);不限实现的方式和语言。
说明:最低要求在给的例程中进行修改,更高级要求为做出图形化界面○3扩展要求:实现trace route的功能二、ICMP协议分析ICMP是(Internet Control Message Protocol)Internet控制报文协议。
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
图2-1 ICMP在协议框架中的位置图2-2 ICMP协议帧格式报文类型分为两类:○1差错报告Error-Reporting:报告路由器或目的站点处理一个ip分组时可能遇到的一些问题○2测试查询Query:帮助主机或管理员从某一个路由器或主机获得一些特定的信息图2-3 ICMP报文类型及作用三、代码框架及流程图图3-1 程序流程图图3-2 代码框架四、重要函数分析○1IP报头格式struct IPHeader {BYTE h_len:4; // Length of the header in dwordsBYTE version:4; // Version of IPBYTE tos; // Type of serviceUSHORT total_len; // Length of the packet in dwordsUSHORT USHORT ident; // unique identifierUSHORT flags; // FlagsBYTE ttl; // Time to liveBYTE proto; // Protocol number (TCP, UDP etc)USHORT checksum; // IP checksumULONG source_ip;ULONG dest_ip; };○2ICMP报头格式struct ICMPHeader {BYTE type; // ICMP packet typeBYTE code; // Type sub codeUSHORT checksum;USHORT id;USHORT seq;ULONG timestamp; // not part of ICMP };○3Raw SocketSOCKET sd;sd=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,0,0,0); setsockopt(sd, IPPROTO_IP, IP_TTL, (const char*)&ttl, sizeof(ttl)) ;RawSocket的作用主要在三个方面:1.通过raw socket来接受发向本机的ICMP,IGMP协议包,或者用来发送这些协议包.2.接受发向本机的但TCP/IP栈不能够处理的IP包.3.用来发送一些自己制定源地址特殊作用的IP包(自己写IP 头,TCP头等)○4Struct of addressstruct sockaddr_in{u_short sin_family;u_short sin_port;struct in_addr sin_addr;char sin_zero[8];}struct in_addr{union {struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;struct { u_short s_w1,s_w2; } S_un_w;u_long S_addr;}S_un; }○5Set addresssockaddr_in dest, source;dest.sin_family = AF_INET;dest.sin_addr.s_addr = inet_addr(host);○6Initial Send_buf && Calculate checksumallocate_buffers(send_buf, recv_buf, packet_size)Sizeof(ICMPHeader)<=Packet_size <=MAX_DATA_SIZE icmp_hdr->type = ICMP_ECHO_REQUEST;icmp_hdr->code = 0;icmp_hdr->checksum = 0;icmp_hdr->id = (USHORT)GetCurrentProcessId();icmp_hdr->seq = seq_no;icmp_hdr->timestamp = GetTickCount();const unsigned long int deadmeat = 0xDEADBEEF;char*datapart=(char*)icmp_hdr + sizeof(ICMPHeader);int bytes_left = packet_size - sizeof(ICMPHeader);while (bytes_left > 0) {memcpy(datapart,&deadmeat,min(int(sizeof(deadme at)), bytes_left));bytes_left -= sizeof(deadmeat);datapart += sizeof(deadmeat);}USHORT ip_checksum(USHORT* buffer, int size){unsigned long cksum = 0;while (size > 1) {cksum += *buffer++;size -= sizeof(USHORT);}if (size) {cksum += *(UCHAR*)buffer;}cksum = (cksum >> 16) + (cksum & 0xffff);cksum += (cksum >> 16);return (USHORT)(~cksum);}○7Send _tosend_buf = icmp_hdr;sendto(sd, (char*)send_buf, packet_size, 0, (sockaddr*)&dest, sizeof(dest));○8recvfromrecvfrom(sd, (char*)recv_buf,packet_size + sizeof(IPHeader), 0,(sockaddr*)&source, &fromlen);五、代码实现结果(截图)1.Ping清水河畔论坛202.115.22.221,能探测到此主机。
个人总结-ICMP的协议详解以及实现

个人总结-ICMP的协议详解以及实现ping 的实现:1.首先查本地arp cache信息,看是否有对方的mac地址和IP地址映射条目记录2.如果没有,则发起一个arp请求广播包,等待对方告知具体的mac地址3.收到arp响应包之后,获得某个IP对应的具体mac地址,有了物理地址之后才可以开始通信了,同时对ip-mac地址做一个本地cache4.发出icmp echo request包,收到icmp echo reply包ICMP在网络层协议,不是用端口来说的,它的功能用类型来区别。
ICMP全称Internet Control Message Protocol(网际控制信息协议)。
在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容。
IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的。
在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。
为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息。
让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。
二、ICMP报文格式ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文(见图表,ICMP报文的结构和几种常见的ICMP报文格式),IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。
RFC定义了13种ICMP报文格式,具体如下:类型代码类型描述0 响应应答(ECHO-REPLY) 3 不可到达 4 源抑制 5 重定向 8 响应请求(ECHO-REQUEST)11 超时 12 参数失灵 13 时间戳请求 14 时间戳应答 15 信息请求(*已作废) 16 信息应答(*已作废)17 地址掩码请求 18 地址掩码应答其中代码为15、16的信息报文已经作废。
计算机网络课程设计题目

计算机网络课程设计一.中小型千兆网吧组建内容及要求:用BOSON软件实现小规模网络的模拟。
熟悉对路由器和交换机的配置命令,调通网络,并通过实例深入理解网络基本工作原理及实现方法。
学会网络构建、日常IP地址1.2.3.4.5.6.写出课程设计报告:设计目的、设计内容、设计方案、拓扑图、设备选型、方案报价、子网划分等内容。
(1)企业网络工程(2)银行网络工程(3)医院网络工程(4)校园网网络工程(5)大型机场信息网络工程(6)邮电综合管理信息网(7)某航空公司网络系统建设(8)某市宽带信息网络(9)证券交易网络系统(10)学校以太网网络建设三.Ping程序的设计与实现设计的目的是使学生掌握网络层协议的原理及实现方法。
设计内容,在给定的Ping程序的基础上做如下功能扩充:●-h 显示帮助信息●●●PingPing消息。
ICMPIdentification,Flags,FragmentOffset用于IP包分段TimetoLiveIP包的存活时长ProtocolICMP=1Addresses发送Echo消息的源地址是发送Echoreply消息的目的地址,相反,发送Echo消息的目的地址是发送Echoreply消息的源地址。
Ping实际上是使用ICMP中的ECHO报文来实现的。
Echo或EchoReply消息格式如下:012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Type|Code|Checksum|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Identifier|SequenceNumber|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Data...+-+-+-+-+-Typeecho消息的类型为8echoreply的消息类型为0。
ping 命令 原理

ping 命令原理
ping命令使用Internet控制消息协议(ICMP)来测试网络连接和测量往返时间(RTT)。
它通过发送ICMP回显请求消息
(称为ping请求)到目标主机,并等待对应的回复消息
(ping响应)来确定主机的可达性和延迟。
当使用ping命令时,计算机会发送一个ICMP Echo Request消息到目标主机,该消息包含有关发送时间的时间戳。
目标主机收到消息后,会生成一个ICMP Echo Reply消息并将其发送回
计算机。
计算机根据收到回复的时间戳和发送时间戳之差来计算往返时间(RTT)。
通过连续发送ping请求并计算RTT,可以检测网络是否正常、主机是否可达以及网络的延迟情况。
ping结果中通常包括目标主机的IP地址、ping请求和响应的往返时间,以及丢包率等
信息。
需要注意的是,由于ping命令使用ICMP协议,因此需要在
目标主机所在的网络中启用ICMP回显请求和回复。
有些网络可能为了安全性而禁用了ICMP,因此在ping请求中可能会收到“请求超时”或“目标主机不可达”的错误消息。
总结起来,ping命令通过发送ICMP回显请求并接收回复消息来测试网络连接和测量往返时间(RTT),以便检测主机可达性和网络延迟情况。
ping程序设计与实现课程设计

ping程序设计与实现课程设计一、课程目标知识目标:1. 学生能理解ping程序的工作原理,掌握网络诊断的基本方法。
2. 学生能描述IP协议、ICMP协议的基本概念及其在ping程序中的应用。
3. 学生了解计算机网络的通信原理,掌握如何利用ping程序检测网络连通性。
技能目标:1. 学生能运用所学知识,独立编写简单的ping程序。
2. 学生通过实践操作,提高问题分析及解决能力,具备基本的网络诊断技巧。
3. 学生掌握使用编程工具(如:IDE、编译器等)进行代码编写、调试和优化。
情感态度价值观目标:1. 学生培养对计算机网络的兴趣,激发学习编程的热情。
2. 学生在学习过程中,培养团队协作、沟通表达的能力,增强自信心。
3. 学生通过本课程的学习,认识到网络技术在实际应用中的重要性,培养对网络安全的责任感。
分析课程性质、学生特点和教学要求,本课程旨在让学生掌握ping程序的设计与实现,结合实际操作,提高学生的编程能力和网络诊断技巧。
课程目标具体、可衡量,有助于教师进行教学设计和评估。
通过本课程的学习,学生将具备基本的网络编程知识和技能,为今后的学习和工作打下坚实基础。
二、教学内容1. 网络基础知识回顾:IP协议、ICMP协议、网络层通信原理。
2. ping程序工作原理:发送ICMP请求、接收ICMP回复、计算往返时间(RTT)。
3. 编程语言基础:C语言或Python语言的基本语法,重点掌握数据类型、控制结构、函数定义。
4. ping程序设计与实现:- 环境搭建:安装编程工具、配置网络环境。
- 代码编写:根据ping程序工作原理,编写发送和接收ICMP请求的代码。
- 调试与优化:调试代码,处理异常情况,优化程序性能。
5. 实践操作:分组进行实际操作,组内讨论、分析问题,相互协作完成ping 程序编写。
6. 网络诊断技巧:运用ping程序检测网络连通性,分析网络延迟、丢包等问题。
教学内容安排和进度:第一课时:网络基础知识回顾,介绍ping程序工作原理。
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类型的套接字。
b. 原始套接字并不存在端⼝的概念。
可以在原始套接字上调⽤bind函数,但是这么做并不常见。
bind函数会设置发送数据报的源IP地址,如果没有使⽤ bind函数,那么内核将出发的借⼝地址作为源地址。
c. 同样,⼀般不会使⽤connect函数,connect函数会指定⽬的地址,但是因为原始套接字不存在端⼝概念,所以connect函数并不重要了。
- 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
学生签名:××××填表日期:×年×月×日
页脚内容17。