东华理工大学长江学院计算机网络实验设计
1. 开发背景
计算机网络是计算机技术与通信技术紧密结合的产物,网络技术队信息产业的发展产生深远的影响,而且将发挥越来越大的作用。本章在介绍网络形成于发展历史的基础上,对网络定义、分类与拓扑构型等问题进行了系统的讨论,并对网络的应用、网络技术的研究与发展进行了探讨,以帮助人们对网络技术与应用有一个全面和准确的认识。
IP数据包作为网络层的数据必然要通过帧来传输。一个数据包可能要通过多个不同的网络。每一个路由器都要讲接收到的帧进行拆包和处理,然后封装成另外一个帧。帧的格式与长度取决于网络所采用的协议。从网络层—数据链路层来看,由于IP数据包的最大长度为65535B,那么它所使用的网络的数据链路层最大传输单元的长度为65535B,那么传输的效率一定会很高。但是实际上大量使用的网络的最大传输单元长度都比IP数据包的最大长度短。以太网的MTU长度为1500B,它远小于IP数据包的最大长度。因此,使用这些网络传输IP数据包时,要对IP数据包进行分成若干较小的片濑传输,这些片的长度小于或等于数据链路层MTU的长度。
2. 需求分析
在传输路径中,路由器通常连接多个网络。不同的网络的数据链路层最大传输单元的长度的可能不同的,因此路由器在接收到数据包,并准备要转发到目的主机时,它必须首先决定使用哪一个接口网络,要决定该网络的数据链路层最大传输单元是否允许该数据包通过。根据数据包长度来确定是否需要对数据包进行分片。
如果数据包来自一个能够通过较大数据包的局域网,又要通过另一个只能通过较小的数据包的局域网,那么就必须对IP数据包进行分片。IP数据包分片的方法如下图所示
在IP数据包分片时,首先要确定片长度。然后将原始IP数据包包括报头分成第1个片。如果剩下的数据仍然超过长度,那么需要进行第2次分片。第2个分片数据加上原来的报头,构成第2个片。这样一直分割到剩下的数据小于片长度为止。
3. 可行性分析
经济可行性
适用本计算机安全系统可提高计算机通信流量分析和管理水平,把大量繁琐工作简单化,能够有效地节省人力物力,并能够准确地进行统计和计算,避免人工统计或计算所带来的差错,保证计算机通信管理高效而有序地进行。
技术可行性
本系统前台采用 Microsoft公司的 Visual C++6.0作为主要开发工具;该系统在安全、准确性和运行速度方面都占有一定优势。
4. 系统分析
本系统是针对于计算机通信流量分析的,通过对IP数据包的版本﹑头部长度 服务类型﹑总长度﹑标示符﹑标志位﹑片位移﹑生存周期﹑协议﹑头部校验和﹑源地址﹑目的IP地址。对所输入的IP数据包进行对应的分析可以得到一系列的对应的属性值。管理员通过对这些IP数据包属性值进行对应的解析可以得到该网络的通信具体情况。
5. 系统设计
5.1 系统目标
利用C/C++语言,根据所学知识,设计程序,功能为捕获网络中的IP数据包,接续数据包的内容,将结果显示在比准输出上,并同时写入日志文件。
具体:
1. 以命令行形式运行,ipparse logfile,其中ipparse是程序命,而logfile则代
记录记过的日志文件。
2. 在
输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3. 当程序接收到键盘输入Ctrl+C时推出。
5.2 系统功能结构
通过对相应的IP数据包进行分析可以得出:
· IP数据包版本的信息
· IP数据包头长度的信息
· IP数据包服务类型的信息
· IP数据包数据包总长度的信息
· IP数据包数据包标识的信息
· IP数据包分段标志的信息
· IP数据包分段偏移值的信息
· IP数据包生存时间的信息
· IP数据包上层协议类型的信息
· IP数据包头校验和的信息
· IP数据包源IP地址的信息
· IP数据包目的IP地址的信息
通过对以上的IP数据报的分析可以得到具体的网络流量状况,并通过对其进行分析,得到当前网络的状况的流量分析结果,从而实现高效的管理。
5.3 结构功能图及活动流程图
5.3.1 结构功能图
5.3.2 功能活动图
5.4 具体功能实现
5.4.1网卡设置
为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。我们要想获取网络设备的所有数据包,就是需要将网卡设置为混杂模式。
5.4.2接收数据包
在程序中可使用recv()函数接收经过的IP包。该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如果对所发送的数据没特殊要求,直接设为0。因为IP数据包的最大长度是65535B,因此缓冲区的大小不能小于65535B。设置缓冲区后,可利用循环来反复监听接收IP包,用recv()函数实现接收功能。
5.4.3 定义IP头部的数据结构
没有详细的进行IP数据包的定义,而是利用IP数据包的结构进行调用使得成为一个虚拟的IP数据报。例如:source.S_un.S_addr = pIPHeader->ipSource; 就是从IP头中取出IP数据源的。
dest.S_un.S_addr = pIPHeader->ipDestination; 从IP头中取出目的IP地址的。后面的依次同理进行求解。
5.4.4IP包的解析
解析IP包的字段有两种策略。针对长度为8位、16位和32位的字段(或子字段)时,可以利用IP-HEADER的成员直接获取。要解析长度不是8位倍数的字段(或子字段)时,可以利用C语言中的移位以人、及与、或操作完成。
5.5 具体的实现代码
#include "initsock.h"
#include "protoinfo.h"
#include
#include
#include
#include
#include "mstcpip.h"
//#pragma comment(lib, "Advapi32.lib")
CInitSock theSock;
void IPHQZ(char*);
int nc=0;
void main()
{
SOCKET sAYU=socket(AF_INET,SOCK_RAW,IPPROTO_IP); //创建原始套接字sHQZ.
char szHostName[56];
SOCKADDR_IN addr_in;
gethostname(szHostName,56); //获取主机名。
struct hostent *pcHost;
//创建一结构体对象用于存放获得的本机IP。
if((pcHost=gethostbyname((char*)szHostName))==NULL)
return ;
addr_in.sin_family =AF_INET;
addr_in.sin_port =htons(0);
memcpy(&addr_in.sin_addr .S_un .S_addr ,pcHost->h_addr_list [0],pcHost->h_length );
cout<<"-----------------------欢迎使用IP网络数据包分析工具---------------------"<0)
{
IPHQZ(buff);
}
}
closesocket(sAYU);
}
void IPHQZ(char *pData)
{
cout<ipSource; // 从IP头中取出源
dest.S_un.S_addr = pIPHeader->ipDestination; // 从IP头中取出目的IP地址
strcpy(szSourceIp, ::inet_ntoa(source));
strcpy(szDestIp, ::inet_ntoa(dest));
cout<<"IP包 源 地址"<iphVerLen>>4) & 0xf) * sizeof(UCHAR); //IP包版本号
cout<<"IP包版本为: IPv"<iphVerLen & 0xf) * sizeof(ULONG);
// IP报头长度
cout<<"IP包报头长度为"<ipTOS>>1) & 0x1)<ipTOS>>2) & 0x1) <ipTOS>>3) & 0x1)<ipTOS>>4) & 0x1) <ipTOS>>5) & 0x1) <<((pIPHeader->ipTOS>>6) & 0xf) * sizeof(UCHAR)<<((pIPHeader->ipTOS>>7) & 0xf) * sizeof(UCHAR)<ipLength);
cout<<"IP包总长度为: "<ipID<ipFlags<ipTTL)<ipProtocol)
{
case IPPROTO_TCP: // TCP协议
cout<<"IP包使用的协议为: TCP"<ipChecksum<说明了IP协议都具有什么功能。但是由于在数据报环节知识的薄弱,我特地去图书馆查阅了相关资料,才大致了解了IP数据报的各种位与协议的概念和意义。进而在脑中才形成了解决问题的理念——网卡可以接收流经其的各种数据报,所以毫无疑问的应当围绕它进行编程实现。但是这也正是我最迷惑的地方——因为完全不知道如何使用套接字socket()函数——毕竟是以前从未接触过的领域。后来通过在一些网络编程教材上的了解和与做同类题目同学的讨论,我编程的思路才逐渐清晰起来。这次课程设计教会我的不仅仅只是如何实践运用与其相关的知识,更重要的是让我懂得个人的实践比单纯的讨论重要,要单纯的讨论比单纯的空想有效。同时,本次课设也大大提高了我编程的自信,让我感受到了成功的喜悦。
7. 参考书籍
《计算机网络(第四版)》 主编:谢希仁 出版社:电子工业出版社 出版时间:2004年7月
《计算机网络课程设计》 主编:吴功宜 胡晓英 张仁 何云 王宁 出版社:机械工业出版社
出版或修订时间:2005年9月
《计算机网络设计》主编:易建勋 出版社:人民邮电出版社 出版或修订时间:2007年10月
《计算机网络》 主编:吴功宜 出版社:清华大学出版社
东华理工大学长江学院
课程设计评分表
学生姓名:万海涛 班级:信管一班 学号:07322121
课程设计题目:IP数据包分析
项目内容
满分
实 评
选
题
能结合所学课程知识、有一定的能力训练。符合选题要求
(5人一题)
10
工作量适中,难易度合理
10
能
力
水
平
能熟练应用所学知识,有一定查阅文献及运用文献资料能力
10
理论依据充分,数据准确,公式推导正确
10
能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等
10
能体现创造性思维,或有独特见解
10
成
果
质
量
总体设计正确、合理,各项技术指标符合要求。
10
说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰
10
设计说明书栏目齐全、合理,符号统一、编号齐全。 格式、绘图、表格、插图等规范准确,符合国家标准
10
有一定篇幅,字符数不少于5000
10
总 分
100
指导教师评语:
指导教师签名:
年 月 日
PAGE
10
_1322999615.vsd
�
IP数据包分析
头长度�
目的IP地址�
源IP地址�
头校验和�
上层协议类型�
数据包标识�
数据包总长度�
服务类型�
生存时间�
分段偏移值�
分段标志�
版本�
_1323000356.vsd
�
生成输出文件�
创建原始套接字�
捕获IP数据包
解析IP数据包�
退出系统