网络流量测量软件的设计与实现.docx
- 文档编号:10292641
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:25
- 大小:262.65KB
网络流量测量软件的设计与实现.docx
《网络流量测量软件的设计与实现.docx》由会员分享,可在线阅读,更多相关《网络流量测量软件的设计与实现.docx(25页珍藏版)》请在冰豆网上搜索。
网络流量测量软件的设计与实现
密级:
NANCHANGUNIVERSITY
学士学位论文
THESISOFBACHELOR
(2002—2005年)
题目网络流量测量软件的设计与实现
学院:
信息工程学院系计算机
专业:
计算机科学与技术
班级:
新余函授站
学号:
学生姓名:
付小清
指导教师:
伍军云
起讫日期:
2005-3-22-----2005-5-20
网络流量测量软件的设计与实现
摘要:
为了方便网络编程,90年代初,由Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口,即WindowsSockets规范,它不是一种网络协议,而是一套开放的、支持多种协议的Windows下的网络编程接口。
本篇论文主要是介绍了在TCP/IP基础上利用winsock2对网卡进行编程,以达到网络流量监测的目的。
论文首先介绍了TCP/IP协议,旨在介绍IP,TCP,UDP等比较重要的协议。
主要是介绍IP头,TCP头,UDP头的特点,以便从IP头中可以获取源地址,目的地址,协议类型等信息。
在随后的章节中提出了Socket的概念,Socket实际上提供了一个通信端口使所有拥有Socket的端口的计算机之间能够相互通信,在本论文中主要说明了socket的建立,监听和撤销的过程。
具体到程序实现中,对网卡混杂模式的设置是通过原始套接字(rawsocket)来实现的。
为了让原始套接字能接受所有的数据,还需要通过将SOCK_RAW设置成SIO_RCVALL。
对数据包的获取通过recv()函数来完成。
最后要完成的工作就是对所捕获的IP数据包进行分析以提取出我们所需要的信息。
在论文的最后是旨在说明进一步工作的展开。
关键字:
TCP/IP,Winsock,原始套接字,NetBios
Abstract:
Forconvenienceofnetworkprogramming,intheearly1990s,anewsetofnetworkprogramminginterfaceusingunderWINDOWSwasestablishedbysomecompaniesunitedbyMicrosoft.ItisknownasWindowsSocketNorm.Itisn'takindofnetworkprotocol,butanopennetworkprogramminginterfacesupportmultipleprotocolsunderWINDOWS.ThemainpurposeofthethesisistointroducehowtouseWinsock2programonnetworkadapterundertheprotocolofTCP/IP.Thisisforthepurposeofmeasurethenetworkdischarge.Atthebeginningofthethesis,weintroduceallimportantprotocolsofTCP/IP,likeIP,TCP,andUDP.WeintroduceIPheader,TCPheaderandUDPheaderforthemostimportantbecauseweneedacquiretheinformationofsourceaddress,destinationaddress,andprotocoltypefromtheIPheader.
Inthefollowingsection,wegivetheconceptofSocket.SocketsactuallyprovideacommunicationporttoallowallthecomputersthathaveSocketporttocommunicatewitheachother.Inthethesis,wetalkontheprocessoftheSocket’sbuildinglisteningandcanceling.Intheprogram,weuseRAWSockettosetadapteronthemixedmode.TolettheSocketreceivealldata,wealsoneedtosettheonSIO_RCVALL.Thenweusethefunctionrecv()togetdatapack.Atlastweneedanalyzethedatapacktogettheinformationweneed.
KEYWORDS:
TCP/IP,Winsock,RAWSOCKET,NetBIOS
目 录
摘 要…………………………………………………………………….1
Abstract………………………………………………………..2
前 言…………………………………………………………………….4
第一章 绪论……………………………………………………………5
1.1 TCP/IP协议及其协议分析方法……………………………….5
1.1.1 分层…………………………………………………………..5
1.1.2 IP地址……………………………………………………….6
1.1.3 端口…………………………………………………………..6
1.1.4 TCP/IP协议在Windows中的实现………………………….7
1.2 Winsock编程…………………………………………………...7
1.3 网络流量测量的程序实现原理………………………………..8
第二章 TCP/IP协议集………………………………………………9
2.1 TCP/IP协议简介……………………………………………….9
2.2 IP协议………………………………………………………….9
2.3 TCP协议………………………………………………………..10
2.3.1 TCP服务模型………………………………………………..10
2.3.2 TCP数据段头………………………………………………..11
2.3.3 TCP协议的建立……………………………………………..12
2.4 UDP协议………………………………………………………..13
第三章 WINSOCK编程概述…………………………………………14
3.1 套接字的概念………………………………………………….14
3.2 套接字的种类………………………………………………….14
3.3 套接字的建立………………………………………………….14
第四章 网络流量测量的程序实现……………………………….16
4.1 网卡初始化…………………………………………………….16
4.1.1 NetBios概述…………………………………………………16
4.1.2 利用NetBios来初始化网卡………………………………..16
4.2 原始套接字的设置…………………………………………….16
4.3 IP包的协议分析………………………………………………17
4.4 结果与测试…………………………………………………….19
结论…………………………………………………………………….21
结束语…………………………………………………………………….22
参考文献…………………………………………………………………23
前 言
随着计算机网络技术日新月异的发展,Internet的逐渐普及,网络对于人们已经不再是一个陌生的概念。
可以说,网络已经在很多人的生活中占据了重要的地位。
于是,各种各样的软件随之诞生,使人们能够更加方便,快捷的访问网络,了解网络以充分的利用网络。
本论文就是向大家介绍网络中比较常用的技术——网络流量的监测。
在介绍具体的程序实现之前,论文首先介绍了TCP/IP协议,可以说,任何网络技术都与TCP/IP协议有着密切的关联,TCP/IP协议给不同型号的计算机,不同的操作系统之间提供了相互通信的平台。
TCP/IP起源于60年代末美国政府资助的一个分组交换网络研究项目,到现在90年代已发展成为计算机之间最常应用的组网形式。
它是一个真正的开放系统,因为协议组件的定义及其多种实现可以不用花钱或花很少的钱就可以公开地得到。
在进行网络流量的测量之前,我们首先要对本地机的信息有一个了解。
这些信息的获取是通过Netbios来完成的。
Netbios利用其网络控制快NCB来完成我们需要它去完成的对网卡的初始化工作。
通过ncb_command来发出命令完成对网卡的操作。
通过发送NCBENUM命令获取网卡的数目和每个网卡的内部编号;对选定的网卡发送一个NCBRESET命令,以便进行初始化;接着,可以发送NCBASTAT命令以获取网卡的信息。
这样,我们可以读出网卡的MAC地址以便进行进一步的工作。
要实现网络流量的测量,Winsock给我们提供了一个接口,我们通过这个接口可以实现对IP层以上的层的数据包的监测。
我们通过建立原始套接字,利用Winsock提供给我们的一些特定的函数就可以完成对网络数据包的捕获。
首先需要建立一个socket,将它设置成为是对ip头的操作,然后利用gethostname,phost获取本机名,本机ip地址。
将本机地址与IP地址绑定之后,将网卡设置为混杂模式,以便对所有经过它的数据包进行接收。
在这些准备工作已经做好之后,余下的就是利用recv()来捕获网络中的数据包。
到现在为止,我们所作的工作都是分析工作的铺垫。
我们最后所要看到的就是网络数据包的分析结果。
在数据包的分析过程中,用户一般想得到的主要信息不外乎是包的协议类型,源/目的地址,发送/接收端口以及包的大小,定义指针,分别指向数据包的相对应的位置就可以得到这些信息。
将得到的信息罗列并显示出来之后,我们就完成了对网络中数据包的流量监测过程。
在论文的最后对整篇论文进行了总结,说明了一些不足之处,并对所有对这篇论文知道并建议的老师等表示感谢。
第一章 绪论
1.1 TCP/IP协议及其协议分析方法
TCP/IP起源于60年代末美国政府资助的一个分组交换网络的研究项目,到现在90年代已发展成为计算机之间最常用的组网形式。
它是一个真正的开放系统,因为协议组件的定义及其多种实现可以不用花钱或花很少的钱就可以公开地得到。
它成为被称作“全球互联网”或“因特网”(Internet)的基础。
1.1.1 分层
协议分层的概念的提出是为了减少协议设计的复杂性,每一层都建立到它的下层之上,每一层的目的就是为了向上一层提供特定的服务。
一台机器的第n层向另一台机器的第n层会话,通话的规则称为协议。
分层和协议构成了网络体系结构。
在提到了分层的概念时就不能不提一下OSI参考模型。
该模型基于国际化标准组织,共分为七层:
♦物理层:
涉及到通信在信道上传输的原始比特流。
♦数据链路层:
加强物理层传输原始比特流的功能,使之对网络层显现为一条无错线路
♦网络层:
关系到子网的运行控制,其中一个关键的问题就是路由选择。
♦传输层:
为用户提供端到端的数据传送服务。
♦会话层:
允许不同机器上的用户建立会话关系,为用户提供会话控制服务。
♦表示层:
为用户提供数据转换和表示服务。
♦应用层:
为用户提供访问OSI的接口,其中包括大量的常见的协议。
TCP/IP通常被认为是一个四层协议系统,每一层负责不同的功能。
♦数据链路层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。
它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
♦网络层,处理分组在网络中的活动,例如分组的路由选择。
在TCP/IP协议组件中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互连网控制报文协议),以及IGMP协议(Internet组管理协议)。
♦运输层,主要为两台主机上的应用程序提供端到端的通信。
在TCP/IP协议组件中,有两个互不相同的传输协议:
TCP(传输控制协议)和UDP(用户数据报协议)。
TCP为两台主机提供高可靠性的数据通信。
而另一方面,UDP则为应用层提供一种非常简单的服务。
它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。
♦应用层,负责处理特定的应用程序细节。
几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:
Telnet远程登录,FTP文件传输协议,SMTP用于电子邮件的简单邮件传输协议,SNMP简单网络管理协议。
图1-1OSI模型与TCP/IP模型的比较
如图所示,OSI模型有七层,而TCP/IP模型只有4层。
OSI模型在网络层支持无连接和面向连接的通信,而TCP/IP模型在网络层仅有无连接的通信方式,但是在传输层却支持两种模式,更好的面向了用户。
1.1.2 IP地址
互连网上的每个接口必须有一个唯一的Internet地址(也称作IP地址)。
IP地址长32bit。
这些32位的地址通常写成四个十进制的数,其中每个整数对应一个字节。
这种表示方法称作“点分十进制表示法”。
需要再次指出的是,多接口主机具有多个IP地址,其中每个接口都对应一个IP地址。
由于互连网上的每个接口必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互连网的网络分配IP地址。
这个管理机构就是互连网络信息中心(InternetNetworkInformationCentre)称作InterNIC。
InterNIC只分配网络号。
主机号的分配由系统管理员来负责。
1.1.3 端口
网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。
按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。
从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。
为此,TCP/IP协议提出了协议端口(protocolport,简称端口)的概念,用于标识通信的进程。
端口是一种抽象的软件结构,应用程序(即进程)通过系统调用与某端口建立连接后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出。
在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问之。
类似于文件描述符,每个端口都拥有一个叫端口号(portnumber)的整数型标识符,用于区别不同端口。
端口号的分配是一个重要问题。
端口号的分配有两种基本分配方式:
第一种叫全局分配,这是一种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。
第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号绑定起来。
1.1.4 TCP/IP协议在Windows中的实现
对TCP/IP协议有了一个结构性的了解之后,就要考虑TCP/IP协议在Windows中是如何应用的。
TCP/IP和OSI有一层映射关系,所以可以将TCP/IP通过OSI映射到Windows操作系统中去。
OSI在Windows中的实现:
物理层就是网卡,数据链路层就是网卡驱动程序,网络层就是NDIS(网络驱动程序接口规范),传输层是TDI(传输驱动程序接口),会话层是SPI(服务提供者接口),表示层是API(应用编程接口),应用层通常就是EXE文件。
1.2 Winsock编程
Winsock就是WindowsSocket的简称,最简单的说,Winsock就是Windows应用程序与TCP/IP之间的通信界面。
如图:
图1-2Winsock在TCP/IP和OSI中的表示
在Windows中,利用Winsock通信需经过几个步骤:
初始化Winsock,创建套接字,建立会话,传送数据,中止会话,中止Winsock。
Winsock既可以提供机器间的通讯,又可提供Windows进程间的通信。
1.3 网络流量测量的程序实现原理
网络流量监测器也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。
但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。
而网络监测器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即可以是发给它的也可以是发往别处的。
显然,要达到此目的就必须将其设置为混杂模式。
这种对网卡混杂模式的设置是通过原始套接字(rawsocket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。
在创建了原始套接字后,需要通过Setsockopt()函数来设置IP头操作选项,然后再通过bind()函数将原始套接字绑定到本地网卡。
为了让原始套接字能接受所有的数据,还需要通过ioctlsocket()来进行设置,而且还可以指定是否亲自处理IP头。
至此,实际就可以开始对网络数据包进行监测了,对数据包的获取仍通过recv()函数来完成。
第二章 TCP/IP协议集
2.1 TCP/IP协议简介
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议组件允许它们互相进行通信。
TCP/IP模型是一种层级式(Layering)的结构,每一层都呼叫它的下一层所提供的服务来完成自己的需求。
TCP/IP模型可以分为以下四层:
应用层、传输层、网络层、数据链路层。
本章主要对TCP/IP协议组件进行概述。
2.2 IP协议
IP是TCP/IP协议族中最为核心的协议。
所有的TCP,UDP,ICMP,及IGMP数据都以IP数据报格式传输。
与大多数网络层协议不同,IP协议一开始就是为了网络互连的目的而设计的,它的工作是提供一种从源端到目的端传输数据报的最佳尝试方法,不管这些机器是否在同一网络中。
我们可以通过分析IP数据报的头部来更好的了解IP协议:
图2-1IP包头
1、版本(version):
记录了数据报属于哪一个版本的协议。
2、IHL字段:
用来告诉头部有多长,以32字节长度为一个单位,最小值为5。
3、服务类型(typeofservice):
使主机告诉子网它想要什么样的服务。
3个标志位D,T,R主机能说明它最关心组合{Delay,Throughput,Reliability}中的哪一项。
还有两位未用。
D,T,R的优先级从0到7。
4、总长(totallength):
包括数据报中的所有信息——包括头部和数据。
总长65535字节。
5、标识(identification):
让目的主机判断新来的分段属于哪个分组,所有属于同一分组的字段包含同样的标识值。
6、分段偏移(fragmentoffset):
说明分段在当前数据报的什么位置。
除了数据报的最后一个分段外,所有分段都要乘以8字节。
因为在分段位移前有3位,其中两位是未用的位,然后是两个1位字段,DF表示不要分段,MF表示还有进一步的分段。
这样表示分段位移的位只有13位,因此每个数据报最长是8192个分组,这样最大的数据报长度是65536字节。
7、生命期(timetolife):
是同一个用来限制分组生命周期的计数器,最长生命周期255s,它必须在每个节点都递减,而且当一个路由器中排队时间过长可以十倍数递减。
8、协议(protocol):
说明将它送给哪个传输进程的,协议的编号在整个因特网上是全球通用的,它定义于RFC1700中。
9、头部校验和(headerchecksum):
这种算法用来校验头部。
该算法将头部所有16位半字数据累加起来,采用补运算,再取其结果的补码。
网由于该算法的原理,当数据报到达时其头部校验和应该为0。
10、源地址(source)和目的地址(destinationaddress):
指明了网络号和主机号。
2.3 TCP协议
TCP(传输控制协议),是专门设计用于在不可靠的internet上提供可靠的、端到端的字节流通信的协议。
每台支持TCP的机器均有一个TCP传输实体,或者是用户进程,或者负责管理TCP流以及与IP层接口的核心。
TCP实体从本地进程接受用户的数据流,并将其分为不超过64字节的数据片段,并将每个数据片段作为单独的IP数据报发送出去。
当包含有TCP数据的IP数据报到达某台相连的机器后,他们又被送给该机器内的TCP实体,被重新组合为原来的数据流。
IP层并不能保证将数据报正确地传送到目的端,因此TCP实体需要判定是否超时并根据需要重发数据报。
到达的数据也可能是按照错误的顺序传到的,这也需要由TCP实体按正确的顺序重新将这些数据报组装成报文。
2.3.1 TCP服务模型
通过在发送方和接收方分别创建称为Socket的通信端点可以获得TCP服务。
每个套接字序号包含主机的IP地址以及一个主机本地的16位号码,称为端口。
为了获得TCP服务,必须在发送方的Socket和接收方的Socket之间明确的建立连接。
一个套接字可以被多个连接同时使用。
序号小于256的端口称为通用端口。
所有的TCP连接均是全双工的和点到点的,TCP不支持多点播送或广播。
TCP连接是字节流而非报文流,报文边界并不按头尾衔接方式保存。
当一个应用程序把数据送给TCP实体时,TCP根据自己的判断,可能会立刻将其发送出去或者将其缓存起来。
有时候用户为了立刻发送数据可以使用PUSH标志来通知TCP不能耽搁数据的发送。
TCP服务的另一个特点就是紧急数据功能。
当一个用户按下DEL或者CTRL+C中断一个已经开始的远程计算时,发送方应用程序在数据流中放入一些控制信息并将其与URGENT标志一起交给TCP,当紧急数据到达目的端之后,接受方应用程序被中断,然后去读取数据并进而发现了紧急数据。
2.3.2 TCP数据段头
发送和接收方TCP实体以数据段(segment)的形式交换数据。
一个数据段包含一个固定的20字节的头,后面跟着以0字节或多字节的数据。
对于数据段的大小有两个限制条件:
(1)每个数据段必须适合IP的载荷能力,不能超过65535字节。
(2)要求每个数据段必须适合最大传送单位MTU。
TCP实体所用的基本协议是滑动窗口协议。
当发送方传送一个数据段时,它要启动计时器。
当数据段到达目的地后,接受方的TCP实体向回发送一个数据段,包含确认序号,希望收到下一个数据段的顺序号。
如果确认号超时,则发送方将重发。
TCP数据段每段均以固定格式的20字节的头开始,固定的头后面可能是头的一些可选项。
在可选项后面最多有65535-20-20=65495数据字节,第一个20指IP头,第二个20指TCP头。
不带任何数据的数据段也是合法的,一般用于确认报文和控制报文。
以下介绍一下TCP数据段头中每个字段的含义:
图2-2TCP头
1、源端口和目的端口字段标识出本地和远端的连接点。
每个主机都可以自行决定如何分配自己的端口(从256开始)。
2、顺序号和确认号字段执行它的通用功能。
确认号指希望接收下一个字节而不是前面已经正确接收
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络流量 测量 软件 设计 实现