计算机网络课程设计.docx
- 文档编号:27971603
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:13
- 大小:246.18KB
计算机网络课程设计.docx
《计算机网络课程设计.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
计算机网络课程设计
琼州学院电子信息工程学院
课程设计报告
课程名称:
计算机网络课程设计
设计题目:
数据包的捕获与分析
专业:
软件工程
班级:
10软件工程
(2)班
姓名:
韦春涛
起止日期:
2012.10.13-2012.11.14
指导教师:
陈德祥
指导教师评语:
最终成绩:
指导教师签名:
年月日
成绩评定
项目
权重
成绩
1、设计过程中的学习态度
0.2
2、课程设计的质量及答辩
0.5
3、设计报告书规范程度
0.3
4、总成绩
1引言
你是网络管理员吗?
你是不是有过这样的经历:
在某一天的早上你突然发现网络性能急剧下降,网络服务不能正常提供,服务器访问速度极慢甚至不能访问,网络交换机端口指示灯疯狂地闪烁、网络出口处的路由器已经处于满负荷的工作状态、路由器CPU已经到了百分之百的负荷……重启动后没有几分钟现象又重新出现了。
这是什么问题?
设备坏了吗?
不可能几台设备同时出问题。
一定是有什么大流量的数据文件,耗尽了网络设备的资源,它们是什么?
怎么看到它们?
这时有经验的网管人员会想到用局域网数据包的捕获来分析一下。
2需求分析
2.1功能需求
随着个人计算机和互联网的普及,越来越多的人开始使用网络这个媒介来发送、接收信息,计算机网络给人们生产和生活带来了巨大的便利。
但是由于网络是一个面向大众的开放系统对数据信息的保密和系统的安全性考虑得并不完备,存在着许多的安全隐患。
而有的人就利用这些隐患,通过网络来发送一些包含色情、反动等不良内容的信息,达到扰乱正常社会秩序的目的。
网络的安全形势日趋严峻。
因此,现在在Internet安全隐患中扮演重要角色之一的网络数据抓包软件受到越来越大的关注。
本软件的设计就是为了达到基本的维护网络安全的作用,对网络上传输的数据进行捕获,然后从中得到所有的网络数据包,并对其进行简单的分析操作。
在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数据包捕获,网络管理员才能对所捕获的数据进行一系列的分析,从而进行可靠的网络安全管理。
IP是TCP/IP协议族中最为核心的协议。
所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。
这些数据类型中又以TCP和UDP两种数据类型为多数。
所以本软件需要设计出按TCP协议类型和按UDP协议类型来过滤网络中的数据。
同时本软件还还应当具有一种过滤功能,那就是当我们知道某个IP地址发送的数据包信息都是属于一些不良,反动等等内容的信息。
那么,我们可以通过在软件上输出这台主机IP地址。
来过滤从这台主机上发送的所有TCP和UDP协议类型的数据。
从而达到信息过滤的要求。
2.2性能要求
由于本设计是安装在个人电脑上,所以要求用户界面简洁、友好、方便使用和操作。
网络上数据包的捕获是入侵检测系统的基础,关键是要保证高速的抓包和低的丢包率。
一方面,网络检测部分的数据源是网络上的数据包,需要经过捕获后方可以提交给分析系统;另一方面,捕获数据包效率的高低直接影响着网络探测部分的性能的好坏,如果发生丢包现象,则有可能丢掉的包就是攻击包。
在保证高速的抓包和低的丢包率的同时,要还要求程序能有较强的稳定性。
一款好的信息过滤软件,都是将在一个长时间工作的环境中运行。
如果不能保证较强的稳定性的话,那么软件对信息过滤的效率和功能有很大的局限性,对数据信息过滤就是失败的。
那么这款软件就不会具备同其他同类似软件的竞争力,更不会有市场,那么它就注定成为一款失败的软件。
试想一下,假如当用户使用这款软件时,软件占用了太多的系统资源而导致用户对电脑的其他操作都很难进行。
那么,谁还会用这款软件呢?
所以,该软件还应该具备一种特点就是较低的系统资源占用率。
3系统设计
3.1抓包原理及局域网设备
数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。
帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。
接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。
就是在这个传输和接收的过程中,嗅探器会带来安全方面的问题。
每一个在局域网(LAN)上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与Internet地址系统比较相似)。
当用户发送一个数据包时,如果为广播包,则可达到局域网中的所有机器,如果为单播包,则只能到达处于同一碰撞域中的机器。
在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据)。
如果某个工作站的网络接口处于混杂模式,那么它就可以捕获网络上所有的数据包和帧。
普通的情况下,网卡只接收和自己的地址有关的信息包,即传输到本地主机的信息包。
要使能接收并处理这种方式的信息,系统需要支持BPF,Linux下需要支持SOCKET一PACKET。
但一般情况下,网络硬件和TCP/IP堆栈不支持接收或者发送与本地计算机无关的数据包,所以,为了绕过标准的TCP/IP堆栈,网卡就必须设置为我们刚开始讲的混杂模式。
3.2数据报格式
3.2.1TCP数据报报头格式
TCP报文段数据结构如图1所示
图1
TCP报文段主要包括以下字段:
·端口号:
端口号字段包括源端口号和目的端口号。
每个端口号的长度是16位,分别表示发送该TCP包的应用进程的端口号和接受该TCP包的应用进程的端口号。
·序号:
长度为32位。
由于TCP协议是面向数据流的,它所传送的报文段可以视为连续的数据流,因此需要给每个字节一个字节编号。
序号字段的“序号”指的是本报文段数据的第一个字节的顺序号。
·确认号:
该字段的长度为32位,它表示接收端希望接收的下一个TCP包的第一个字节的序号。
·报头长度:
该字段长度为4位。
TCP报头长度是以4B为一个单元来计算的,实际上报头长度在20B~60B之间。
因此这个字段的值在5~15之间。
·保留:
长度为6位,留作今后使用,目前全部置0。
·控制:
这个字段定义了6种不同的标志,每个标志占一位,在同一时间可以设置一位或多位。
URG位为1时,表明应尽快把数据传送给应用程序,否则表明允许数据在缓存中存放一段时间。
RST位为1时,表明要强制切断连接。
SYN位为1时,表明有确立连接的请求,这时,把序号字段的初始值作为序号字段的值,以便开始通信。
FIN位为1时,表明发送方已经没有数据发送了。
·窗口大小:
长度为16位,窗口对应的数据是以字节为单位的数据,因此最多能够传送的数据为65535B。
·紧急指针:
该字段长度为16位,指向必须紧急处理的数据的位置,只有当标志URG=1时,紧急指针才有效。
从TCP报头后面的报文数据开始,到紧急指针所指出长度的数据,就是必须紧急处理的数据。
·选项:
该字段可以多达40B,包括单字节选项和多字节选项。
·校验和:
该字段长度为16位,校验和的校验范围包括伪头部,TCP报头以及应用层来的数据。
其计算方法和IP协议头部校验和的计算方法一样。
伪头部为12B,它本身并不是他、TCP数据包的真正头部,只是在计算校验和时,临时和TCP数据包连接在一起。
3.2.2IP数据报格式
IP数据包数据结构如图2所示:
图2
本课程设计要求用命令行将IP地址和端口(Port)填充到数据包的相应字段,IP地址则填充到IP数据包的源地址或者目的地址字段。
IP数据报包含以下各个字段:
·版本:
用来表明建立数据报的IP版本,IPv4的字段为0100;
·首部长度:
占4比特字段,因此首部最长为60个字节;
·服务类型:
TOS;
·总长度:
总长度字段是指整个IP数据报的长度,以字节为单位.由于该字段长16比特,所以IP数据报最长可达65535字节;
·标识:
当前数据包;
·标志:
标志数据包是否可拆分以及是否拆分后的数据包的最后一部分等信息;
·片偏移:
用于指定分段在原始数据报中的位置;
·生存时间:
8比特,用于指定数据报允许保留在网络上的时间;
·协议:
8比特,用于指定数据报数据区中携带的消息是由哪种高级协议建立的。
ICMP为1,TCP为6,UDP为17;
·首部检验和:
16比特,仅用于IP报头校验和;
·源地址:
源IP地址;
·目的地址:
目的IP地址;
·选项、可选字段:
填充字段用于确保将选项字段填充为最少32个比特位,以保证IP报头以32位结束;
3.3系统开发
3.3.1利用Java开源库JPcap
JDK包只提供网络层以上的功能,以下的功能需要用到其他包。
Jpcap是一个能够抓取与发送网络数据包的Java组件,我们可以使用Jpcap从一个网络接口获取数据包,然后在Java中对它们进行分析和显示。
同样也可以通过一个网络接口发送任意数据包。
Jpcap当前能够捕获以太网,IPv4,IPv6,ARP/RARP,TCP,UDP和ICMPv4数据包。
3.3.2利用网络抓包工具WinPcap
Jpcap功能的实现从本质上将是通过调用WinPcap完成的。
WinPcap(WindowsPacketCapture)是Windows平台下一个免费,公共的网络访问系统。
WinpCap用于为win32应用程序提供访问网络底层的能力。
它提供了以下的各项功能:
1)捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;
2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;
3)在网络上发送原始的数据报;
4)收集网络通信过程中的统计信息。
3.3.3填充TCP包、IP包及发送
3.3.3.1填充TCP包、IP包
填充TCP数据包和IP数据包
开源库Jpcap已经创建了TCPPacket类和IPPacket类,而且提供了相应的构造函数对创建的实例进行初始化。
所以对TCP包和IP包的填充,即可通过相应的构造函数对其参数进行设置。
3.3.3.2发送TCP数据包
发送TCP数据包:
开源库Jpcap创建了一个JpcapSender类用于对各种类型的数据包进行发送,发送时只需将数据包以参数的形式传递给JpcapSender的一个方法
sendPacket(TCPPacket);
3.3.3.3TCP数据包发送步骤及流程图
TCP数据包发送步骤:
1)调用Jpcap包里面的JpcapCaptor类的静态方法getDevceList()来获取可用的网络设备,如虚拟拨号和以太网卡等;
2)选择相应的网络设备,对其进行初始化,得到相应设备的一个JpcapSender的一个实例;
3)创建一个TCPPacket的实例,并对其进行初始化,即填充TCP数据包;
4)对包含创建的TCPPacket实例的IP数据包参数设置,即填充IP数据包;
5)设置数据链路层帧的源MAC和目的MAC;
6)调用2)中的得到的JpcapSender的实例发送TCPPacket;
TCP数据包发送流程图如图3所示:
图3
3.3.4源程序及执行代码说明
publicvoidcapturePacketsFromDevice(){
if(jpcap!
=null)
jpcap.close();
jpcap=Jcapturedialog.getJpcap(frame);
if(jpcap!
=null){
startCaptureThread();
}
}
privatevoidstartCaptureThread(){
if(captureThread!
=null)
return;
captureThread=newThread(newRunnable(){
publicvoidrun(){
while(captureThread!
=null){
jpcap.processPacket(1,handler);
}
}
});
captureThread.setPriority(Thread.MIN_PRIORITY);
captureThread.start();
}
voidstopcaptureThread(){
captureThread=null;
}
publicvoidstopCapture(){
System.out.println
(2);
stopcaptureThread();
}
privatePacketReceiverhandler=newPacketReceiver(){
publicvoidreceivePacket(Packetpacket){
System.out.println(packet);
frame.dealPacket(packet);
}
};
(1)抓包实现方法
定义一个抓包对象JpcapCaptorjpcap=null;但点击开始时调用privatevoidstartCaptureThread()方法开始抓包,jpcap.processPacket(1,handler);语句能够反复调用handler所指向的方法,这个方法中定义的packet就是网络上抓到的数据包,经过frame.dealPacket(packet);就可以显示在主界面上。
4软件测试
对程序的调试过程主要就是对新引进的Java开源库Jpcap的学习学习过程,单单的将Jpcap包加载到当前工程下是不能正常工作的。
还需要一些其他的软件支持与设置。
首先,安装WinCap.exe,Jpcap是一个中间件,它的很多基本函数声明为native而没有定义,其具体定义在就在WinCap.exe提供的文件中。
其次,将Jpcap的动态链接库文件复制到jdk\bin和jre\bin目录下,将Jpcap.jar复制到jdk\lib\ext和jre\lib目录下。
5使用说明
图4
图4为程序启动时的初始化界面
图5
图5为选择开始抓包后的选择功能界面。
可对界面,混合模式,过滤器等,进行设置和选择。
图6
图6为开始抓取后的,得到的数据。
6设计总结
通过此次课程设计,我学到了以下东西:
1)对书本所学的知识进行了具体的实践,这样对知识的掌握就不是停留在
理论方面,而是可以将理论进行实践,进一步增强对知识的理解与掌握。
2)由于Java语言提供的Jdk只对网络层以上提供服务,网络层以下的服务
必须依赖外来的开源包。
通过对Jpcap提供的doc的阅读,使我掌握了正确使用Jpcap的方法,学习新的东西,这是我的一个收获。
通过此次课程设计,我体会到的主要是:
通过本次课程设计,让我体会到了,java在网络方面的另一种强大,但还是最终还是依靠了C的环境。
7参考文献
(1)谢希仁,《计算机网络》,电子工业出版社,2008.1
(2)邓亚平,尚凤军《计算机网络》,科学出版社,2007.3
(3)曹晓军,《计算机网络》,科学出版社,2012.8
(4)雷震甲,《计算机网络》,机械工业出版社,2010.9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计