毕业设计(论文)基于IP包流量分析程序的设计与实现.doc

上传人:仙人指路1688 文档编号:3979302 上传时间:2023-03-30 格式:DOC 页数:37 大小:681.50KB
返回 下载 相关 举报
毕业设计(论文)基于IP包流量分析程序的设计与实现.doc_第1页
第1页 / 共37页
毕业设计(论文)基于IP包流量分析程序的设计与实现.doc_第2页
第2页 / 共37页
毕业设计(论文)基于IP包流量分析程序的设计与实现.doc_第3页
第3页 / 共37页
毕业设计(论文)基于IP包流量分析程序的设计与实现.doc_第4页
第4页 / 共37页
毕业设计(论文)基于IP包流量分析程序的设计与实现.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《毕业设计(论文)基于IP包流量分析程序的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于IP包流量分析程序的设计与实现.doc(37页珍藏版)》请在三一办公上搜索。

1、摘要 随着因特网技术的发展,网络通信问题日益成为人们关注的焦点,IP包流量分析程序便是一种分析网络状况的有效方法,它从数据包流量分析角度出发,通过实时地收集和监视网络数据包信息,来检查网络数据传输的状态,从而监控网络环境。当前,网络在人们生活中发挥着越来越大的作用,人们也对网络有了越来越高的需求,要适应时代的需要,提供完善便利的网络服务,进行IP包流量分析的课题研究很有必要。分析IP网络流量,开展IP网络流量的监测活动,对IP网络的发展都具有极其重要的意义。 本设计是针对于IP包流量分析的,对所经过的IP数据包进行分析可以得到一系列对应的属性值。通过对这些IP数据包属性值进行对应的解析可以得到

2、该网络具体的通信情况。IP包流量分析程序使用RAW SOCKET设置网卡混杂模式以此来接受经过的数据包,并且运用链表结构来存储符合条件的数据包,实现了分析IP数据包来源、类型、数量及长度的功能。IP包流量分析程序的功能实现,有助于我们对网络的数据传递以及数据包类型进行掌握和分析,有助于对流量的多少进行判定,便于对发生或即将发生的网络问题进行提前防范。关键词: IP数据包; 流量分析; 报文信息分析 ABSTRACT With the Internet technology, network communication is increasingly becoming the focus of

3、attention, IP packet traffic analysis program is one effective method of network conditions, it is the angle from the data packet traffic analysis, real-time network data collection and monitoring Package information, to check the status of network data transmission to monitor the network environmen

4、t. At present, the network plays in peoples lives increasingly important role, it also has increasingly high demand for the network to meet the needs of the times, providing convenient Internet services, IP packet flow analysis for research Necessary. Analysis of IP network traffic, IP network traff

5、ic to carry out monitoring activities, the development of the IP network are of great importance. This design is aimed at the IP packet flow analysis, on which the IP data packets through the corresponding analysis can be a series of corresponding attribute values. IP data packets through the corres

6、ponding attribute values resolve to get the specific circumstances of the communication network. IP packet traffic analysis program that uses RAW SOCKET set promiscuous mode in order to accept the card after the data packets, and the use of linked list structures to store eligible packets of IP data

7、 packets to achieve the source, type, number and length features. IP packet traffic analysis program implementation, help us to network data transmission and data packet type for control and analysis, help to determine the amount of traffic, facilitate, or is about to advance to prevent network prob

8、lems.显示对应的拉丁字符的拼音Keywords: IP data packet; message type; traffic analysis目 录 1. 绪论11.1 研究的目的和意义11.2 开发工具及环境简介22. 系统分析32.1 需求分析32.2 可行性分析32.3 IP协议分析42.4 IP流量分析73. 系统总体设计93.1 开发设计思想93.2 系统设计93.3 程序结构设计103.4 程序功能设计133.5 系统设计中的重点及难点154. 系统详细设计与实施174.1 Winsock服务的初始化174.2存储功能设计与实现174.3 Socket句柄赋值功能的实现184.

9、4 程序实现所需重要函数184.5 Raw socket介绍205. 系统测试255.1 测试方法255.2 运行命令及运行结果25结束语31参考文献32致 谢33附录35A 程序清单35B 用户手册47C 软件光盘47D 科技译文481. 绪论1.1 研究的目的和意义Internet的迅速发展使社会经济结构和人们的生活方式发生了巨大的变化,而IP流量是网络管理的重要数据基础,通过IP分析流量数据,可以帮助网络管理员发现各种恶意网络攻击,对攻击源进行追溯和定位,从而对网络中的计算机进行有效的保护。异常流量是指能对网络的正常运行造成危害的流量,异常流量可能会导致网络拥塞。通过对IP包流量进行检测

10、和分析,把IP包流量解码、分类和统计后,对危害流量进行限制和阻隔,更有效地保护关键应用流量,使网络变得更加畅通。尤其是在宏观发现流量异常的同时,如何迅速有效地分离和抑制异常流量,对非法业务实行遏止,使网络流量能保持其健壮性,就成为我们迫切想要解决的问题。现在很多软件针对网络流量的监控,属于企业级使用范围,而对于普通中小网络来说,虽然有杀毒软件和防火墙,但却不知道一些恶意程序也可以悄悄的在后台运行,可以神不知鬼不觉的连接网络,来窃取用户的信息和隐私,比如说:木马程序就可以通过修改数据包的信息来进行信息的盗取。而这是广大网络管理人员不愿意看到的情况,本设计通过对IP包的捕获与分析可以获取与本机进行

11、数据交换的数据包的内容,进而做出合理的选择保护网络。在中小网络中网络安全起着至关重要的作用,数据的出入是不允许出现任何闪失的。网络管理人员在做好防护的同时也要对IP包进行捕获和流量分析。因为网络上的信息流量是通过计算机的网卡转换把网上的信息呈现在我们眼前的,通过对流经网卡的数据包的分析,如果发现有恶意连接或是异常流量的时候,网络管理员就可以及时的做出相应的措施来保护网络的通畅和安全,这也就是进行IP包流量分析的重要意义所在。1.2 开发工具及环境简介 本设计采用的程序设计语言为C语言。C语言是一种面向过程的计算机程序设计语言,它是目前众多计算机语言中举世公认的优秀的结构程序设计语言之一1。同时

12、C语言又是一种通用的程序设计语言,在国际上广泛流行。世界上很多著名的计算公司都成功的开发了不同版本的C语言,很多优秀的应用程序也都使用C语言开发的,它是一种很有发展前途的高级程序设计语言。开发环境选用的是Microsoft Visual C+6.0(微软公司的开发工具),具有集成开发环境的功能,可提供编辑C语言,C+以及C+/CLI等编程语言。Visual C+集成了MFC6.0,于1998发行。发行至今一直被广泛地用于大大小小的项目开发。它以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编

13、译被修改的代码,而不必重新启动正在调试的程序。之所以采用以上两种工具是因为在大学期间我主要学习的语言课程就是C语言,还系统的学习了Visual C+程序设计教程。在过去看来,Windows编程是复杂而又难以驾驭的,Visual C+这种强大开发工具的出现改变了这种情况。2. 系统分析2.1 需求分析在程序开发之前,设计人员要对系统进行需求分析,要认真了解网络管理员的要求,细致地进行调查分析,深入描述程序的功能和性能。需求分析是奠定程序开发的基础,也是起决定性的一步。如今网络发展日新月异,大量的中小网络层出不穷,伴随而来的也有流量压力对网络的冲击。因此,基于IP流量分析的研究就显得十分必要,这样

14、网络管理员就能更加直观的来了解网络实时的通信情况,有利于网络的管理。IP流量分析能够帮助网络管理人员更好的了解所管理的网络,流量分析技术能够帮助网络管理人员提高解决问题的效率,解决问题的快慢关键在于如何快速分析问题发生的原因,一个高级的管理人员必须懂得有效的利用各种分析工具和手段来提高问题分析的效率,而IP流量分析是最为有效的手段之一。系统开发的目标即采用捕获一段时间内以本机为源地址或目的地址IP数据包的方法,具体的数据包如TCP数据包,UDP数据包,IGMP数据包,ICMP数据包等,以此来统计IP数据包的信息。针对于IP包的分析可以得到以下内容:本地IP地址及与本机发生数据通信的IP地址,交

15、换的数据包数量、数目,IP包的版本和生存时间等。通过对这些内容的分析,网络管理员就可以了解计算机通信的情况,从而做出应对措施。2.2 可行性分析在系统调查的基础上,针对本设计的开发具有可操作性,对其进行从经济、技术、社会三方面进行分析和研究。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。该程序的可行性分析包括以下几个方面的内容。1.经济可行性IP包流量分析程序开发成本较小,硬施仅需要一台计算机来进行开发,软件方面需要正版软件Visual C+6.0作为开发工具,总计花费在一万元左右。此外,程序不仅开发成本小,维护成本也不多,并且易于维护,非常适用于中小网络管理员的使用

16、。2.技术可行性本程序采用 Microsoft公司的 Visual C+6.0作为开发工具,该工具在安全性、准确性和运行速度方面都占有一定优势。Visual C+6.0在很多学校作为教学工具进行教学工作,由此可见此开发工具深受专业人士推崇,是种被开发人员看好且认可的技术工具。在大学期间我深入的学习了Visual C+6.0,尤其是在理论和实践相结合的方面上下了很大的功夫,循序渐进的掌握了Windows程序开发,还能学会如何在程序中添加一些必要的语句以达到特定的目的。同时,还学会了设计事件驱动程序来响应Windows消息、创建定制对话框、绘制窗口、显示位置图以及常用的菜单等操作,因此在技术层面上

17、是可以实现的。3.社会可行性IP流量分析程序的实现将会给公司、企业等中小网络管理人员带来十分强大的助力,它所实现的对于IP包相关流量分析的功能对于网络的管理、优化起到至关重要的作用,社会影响力颇为显著。IP包流量分析程序强大功能的实现将会使它成为网络流量分析软件的模范,将会被大量中小网络管理人员竞相使用。2.3 IP协议分析IP流量分析程序在运行过程中捕获的IP数据包主要包括TCP数据包,UDP数据包,IGMP数据包,ICMP数据包等,这些数据包分属于不同的TCP/IP协议。IP协议是TCP/IP一系列协议的核心,主要能负责IP分组的传输。IP提供不可靠的,无连接的,尽最大努力交付的分组传输机

18、制2。“不可靠的”含义是指它不能保证IP分组成功的传送到达目的站。“无连接的”含义是指IP并不维护后续分组的状态信息,每个分组的处理都是相互独立的。最后,IP提供的是“尽最大努力交付”的服务指尽力发送每个数据包,并不随意丢弃分组。下面就IP包的具体协议及报文结构类型进行相关介绍分析。1.UDP是一个非常简单的协议,除了运输层协议能够做的最少的工作,除了提供进程到进程之间的通信,几乎没对IP增加任何东西。数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分。数据报的最大长度根据操作环境的不同而各异。特点如下:(1)UDP是一个无连接协

19、议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。(2)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。 (3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。 (4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。 (5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加

20、首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。UDP数据包格式由手部和数据两部分组成。如图2.1所示。 图2.1 UDP数据报格式2.传输控制协议(TCP,Transmission Control Protocol)就是为了在不可靠的互联网上提供一个可靠的端到端、面向字节流连接设计的。它提供了面向连接的服务、全双工服务和字节流传递服务3。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP

21、层,由它来通过网络将包传送给接收端实体的TCP层。TCP和UDP都具有端口号,而且它们对端口号的使用是彼此独立的。这就是说,同一个端口号可以用两种不同的用途。其中TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,他是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。TCP报文是TCP层传输的数据单元,也称为报文段4。如图2.2所示。首部数据源端口号 16bit目的端口号 16bit序列号32bit确认号32bit首部长度4bit保留6bitURGACKPSHRSTSYNFIN窗口大小 16bit校验和 16bit紧急指针 16bit 选项和填充 图2.2 TCP报文段格式2.4

22、IP流量分析作为一个高级的网络管理员,要管好一个承载关键业务的网络系统,首先要对自己所管理的网络建立深入的了解,提高自身的网络管理技术水平,而掌握高级的IP流量分析技术并在工作中有效的应用,将对网络管理工作带来非常大的帮助。管理好一个网络最重要的就是对网络的了解,对IP流量分析能使网络管理人员更深入地了解网络。1.每个网络都有自身的运行规律,这和网络的结构、应用特点等紧密相关,通过IP流量分析,能够了解网络系统运行的规律。网络上重要的应用在运行时,每一个访问,每一个交易处理,数据都由网络来传输,通过分析应用的流量,能够清楚的了解应用运行的规律,数据包内容、数据包处理数量、响应时间等数据,都可以

23、通过IP流量分析手段获取。每个用户的网络行为都是相互影响的,同时会对网络的运行产生影响,伴随着每个用户在网络中的行为都有网络流量的产生,通过对网络用户的IP流量进行分析,能够直观地了解网络用户的网络行为。2.网络异常的发现是建立在对网络了解的基础之上的,如果能做到及时地发现网络中的异常,将使网络管理更主动,将为网络的持续高性能运行提供重要的保障5。通过IP流量分析就可以很轻松的知晓网络存在的异常。网络中流量的异常,包括利用率、数据包数的异常、连接数量、应用流量的异常,都可以通过长期主动IP流量分析来及时发现。异常的网络行为也都有明显的流量特征,如感染了蠕虫病毒、安装了后门程序等,长期的流量分析

24、能及时的发现网络中这些异常行为,有利于网络管理人员做出正确的应对措施。IP流量分析可以为网络和应用问题的分析提供依据,特别是数据包级的分析,因为这些依据是真实的,它们是实实在在的在网络中传输的数据包,这也是流量分析能够大大提高网络和应用问题分析效率的原因。IP流量分析是有助于维护网络持续、高效和安全运行的一种手段,IP流量分析有助于网络管理员对网络运行管理、应用运行管理和网络应用问题分析。 3. 系统总体设计3.1 开发设计思想程序开发设计思想有以下几点:1.尽量采用现有的软硬件环境及先进的开发技术,从而达到充分利用现有资源,提高程序开发水平和应用效果的目的。2.程序应符合网络管理员使用习惯的

25、要求,满足他们工作的需要,并达到操作过程中的直观、实用、方便、安全等要求。3.系统采用模块化程序设计方法,既便于程序功能的各种组合和修改,又便于未参与开发的技术人员对其功能的补充。3.2 系统设计在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非是自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的的数据包。所以我们要想截获流经网络设备的所有数据包,就要采取一点特别的手段了:将网卡设置为混杂模式。这样,该主机的网卡就可以捕获到所有流经其网卡的数据包和帧

26、。但是要注意一点,这种截获仅仅是数据包的一份拷贝,而不能对其进行截断。首先初始化环境,再创建原始socket将其初始化;然后获得本地地址,把原始socket绑定到本地网卡,再设置sock_raw为SIO_RCVALL,以便接收所有的IP包;最后监听网卡捕获IP包,把捕获到的包加入链表,在达到预定时间时退出监听并输出统计信息。用命令提示符输入程序所在位置并且加上程序运行时间程序才能运行。程序使用命令行运行:IPMONITOR.EXE DURATION-TIME。3.3 程序结构设计在main方法中首先判断命令行输入的参数格式是否合乎要求,然后将获取的时间长度的字符串转化为整型的,然后依靠系统时间

27、进行判断程序执行时间是否已经满足要求。如果满足要求则进行原始套接字和获取本机IP等操作为程序能够读取网卡接收的信息做准备,最后要把网卡设置为混杂模式以便使网卡能够接收进入所有经过此网卡的数据包。混杂模式(Promiscuous Mode)是指一台机器能够接收所有经过它的数据流,而不论其目的地址是否是它。这被网络管理员使用来诊断网络问题,但是也被无认证的想偷听网络通信(其可能包括密码和其它敏感的信息)的人利用。混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包。默认情况下网卡只把发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。简单的讲,混杂模式就是指网卡能接受所有通过它的数据

28、流,不管是什么格式,什么地址的。具体的地址转发则是在接受到数据后由MAC层来进行。在程序执行过程中时刻监视系统时间以便时间满足要求后能及时退出,将捕捉到的数据包的头文件的内容加入链表中,同时将相应的信息输出到屏幕,此链表再追加的时候可以自行作出判断,如果之前捕捉到的相同源目的地址和协议类型的数据包则不添加新的结点而是把原来的计数器加一,在执行时间满足之后退出循环,将链表中的信息输出作为这段时间里的捕捉到的数据包的统计信息。设计结构图如3.1所示。图3.1设计结构图1.链表结构设计链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的6。链表由一系列

29、结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表存储的特点是用一组任意的存储单元存储数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素之间的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息相比于线性表顺序结构,链表比较方便插入和删除操作。首先要做的便是定义链表的内容,如图3.2所示。 图3.2链表定义结构图2.IPstatistic统计模块设计输出统计的IP数据包信息, 列出源地址、目的地址、不同协议类

30、型的IP包数量。结构图如图3.3所示。 图3.3 链表统计图3.4 程序功能设计程序功能设计采取模块化设计的方法,在上一节介绍了链表的结构化设计,至于存储的细节在这就不做过多的叙述。下面重点描述一下IP数据包捕获功能示意图和程序运行功能示意图。本设计重点的任务就是对本地计算机进行监控,把网卡设置为混杂模式以此来捕获流经网卡的全部数据包信息,加上一些辅助的本地信息查询,显示得到当前计算机的基本信息,达到功能简洁方便,消耗资源少而又不影响其他程序运行的需求。在我们的个人计算机上,网卡是比较容易被忽略的,它是个人用户与互联网连接的关键所在,而且它也有流量的出入,因为网络上的信息流量是通过计算机的网卡

31、转换把网上的信息呈现在我们眼前。我们往往都是关注网络流量,但是网卡同样要引起网络管理人员的重视。小事物往往有着大作用,通过对网卡流量的监测与分析,比如说:普通用户的下载速率肯定是比上传速率大很多,当恶意程序连接网络时,上传速率却大大大超过下载的速率,此时网络管理人员就该注意是否存在不正常的网络连接。通过对IP数据包的捕获,我们可以得到如下信息:源地址、目的地址、IP包版本及生存时间、数据包类型及长度等。对于网络管理人员来说,从这些信息中就可以了解到与本机发生数据交换的计算机相关信息,知晓当地网络通信的实时状况。面对如此多的数据报信息,如果是一位有足够网络经验的管理人员,就可以从细枝末节处察觉出

32、是否存在潜在的网络问题,这对于网络的通畅和安全是非常重要的。来自网络的安全威胁是实际存在的,特别是在网络上运行关键业务时,网络安全是首先要解决的问题,为此,对IP包流量分析就要深入了解。对于IP包捕获的过程如图3.4所示。图3.4 IP包的捕获通过对IP数据包的分析,我们可以从中得知IP数据包捕获的相关信息,包括捕获时间、IP地址信息、协议类型及数据包相关信息。这些信息是我们进行数据包分析所必需的,在了解了这些信息后,就可以从容的面对网络实际运行状况。程序的执行首先要进行winsock的初始化,初始化后,必须建立一个SOCKET结构来保存SOCKET句柄,设置网卡混杂模式进行数据包接受并输出显

33、示内容。主程序运行结构图如图3.5所示。 图3.5 主程序结构图3.5 系统设计中的重点及难点重点是要掌握网络传输的原理和方式,比较困难的地方是关于如何捕捉数据包头文件,如何分析头文件的信息获取数据传输的方式和源地址目标地址等信息,以及通过建立链表存储并且统计数据包的个数和信息。具体问题及措施如下:1.获取数据包的包头信息解决办法:把每一个数据包放入足够大的缓冲区,然后根据缓冲区的地址取出数据包的包头。2.捕捉数据包及统计解决办法:用一个名为AddNode的函数实现这个功能,在统计的过程中把捕捉到的数据包中的源地址和目的地址输出在屏幕上,然后往链表中加入,在往链表中加入的时候判断一下如果是相同

34、性质的(相同的目的、源地址和协议类型),就把原来的节点中的num计数器加1,如果不是则将其加入链表。3.数据包捕捉的结束解决办法:设置一个条件为true的while循环,在程序开始执行的时候获取当时的时间start,在while循环中获取当时的时间end然后用end-start来判断时间是否超出,如果超出则执行break跳出while循环,不再捕捉数据包。 4. 系统详细设计与实施4.1 Winsock服务的初始化WSAStarup是Windows SocKNDs Asynchronous的启动命令、Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令。为

35、了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中7。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。使用Socket的程序在使用Socket之前必须调用WSAStartup函数。返回值为0则说明函数执行成功,而错误代码有如下:WSASYSNOTREADY 指出网络通信依赖的网络子系统还没有准备好

36、;WSAVERNOTSUPPORTED 所需的Windows Sockets API的版本未由特定的Windows Sockets实现提供;WSAEINVAL 应用程序指出的Windows Sockets版本不被该DLL支持。4.2存储功能设计与实现线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素之间的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个结点,表示线性表中一个数据元素。下面要做的便是把捕

37、获的符合要求的IP包插入链表。1.如果表头指针为空,将首个IP包插入链表头,表头指针后移,表尾指针置空2.从第一个包开始扫描, 如果存在相同目的地址、源地址和协议类型的IP包, 则让那个结点的记数累加 。3.当指针到达链表末尾时,插入新的IP包, 计数置一,表尾指针置空。4.3 Socket句柄赋值功能的实现创建一个与指定传送服务提供者捆绑的套接口,可选地创建或加入一个套接口组。此函数为socket()的扩展版本,其功能都是创建一个原始套接字。使用时需要包含winsock2.h 头文件和链接wsock32.lib库。为了使用socket()函数创建的Socket,还需要将这个Socket与so

38、ckaddr绑定。实际上,bind()函数采用struct sockaddr是为了考虑兼容性,最终struct sockaddr和struct sockaddr_in的内存占用是等同的。4.4 程序实现所需重要函数1.WSAStartup()WSAStarup,是Windows SocKNDs Asynchronous的启动命令、Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令。返回值为0则说明函数执行成功,其他错误代码:WSASYSNOTREADY 指出网络通信依赖的网络子系统还没有准备好;WSAVERNOTSUPPORTED 所需的Windows

39、Sockets API的版本未由特定的Windows Sockets实现提供;WSAEINVAL 应用程序指出的Windows Sockets版本不被该DLL支持。本函数必须是应用程序或DLL调用的第一个Windows Sockets函数。它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节。应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets API函数。 2.Setsockopt()#include int PASCAL FAR setsockopt( SOCKE

40、T s, int level, int optname,const char FAR *optval, int optlen);s:标识一个套接口的描述字。level:选项定义的层次;目前仅支持SOL_SOCKET和IPPROTO_TCP层次。optname:需设置的选项。optval:指针,指向存放选项值的缓冲区。optlen:optval缓冲区长度。设置套接口的选项。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。选项影响套接口的操作,诸如加急数据是否在普通数据流中接收,广播数据是否可以从套接口发送等等。若无错误发生,setsockopt()返回0。否则的话,返回

41、SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。3.Gethostname()返回本地主机的标准主机名。该函数把本地主机名存放入由name参数指定的缓冲区中。返回的主机名是一个以NULL结束的字符串。主机名的形式取决于Windows Sockets实现它可能是一个简单的主机名,或者是一个域名。然而,返回的名字必定可以在gethostbyname()和WSAAsyncGetHostByName()中使用。如果没有错误发生,gethostname()返回0。否则它返回SOCKET_ERROR。应用程序可以通过WSAGetLastError()来得到一

42、个特定的错误代码。4.Gethostbyname()gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针8。结构的声明与gethostaddr()中一致。返回对应于给定主机名的主机信息。如果没有错误发生,gethostbyname()返回如上所述的一个指向hostent结构的指针,否则,返回一个空指针。应用程序可以通过WSAGetLastError()来得到一个特定的错误代码。5. struct sockaddr unsigned short sa_family;char sa_data14; ; sa_family是地址家族,一般都是“AF_xx

43、x”的形式。通常大多用的是都是AF_INET,代表TCP/IP协议族。 sa_data是14字节协议地址。 此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构。 4.5 Raw socket介绍同一台主机不同进程可以用进程号来唯一标识,但是在网络环境下进程号并不能唯一标识该进程。TCP/IP主要引入了网络地址、端口和连接等概念来解决网络间进程标识问题。在VC中进行WINSOCK编程时,需要引入如下两个库文件:WINSOCK.H(这个是WINSOCK API的头文

44、件,WIN2K以上支持WINSOCK2,所以可以用WINSOCK2.H);Ws2_32.lib(WINSOCK API连接库文件)。套接字(Socket)是一个指向传输提供者的句柄,TCP/IP协议支持3种类型的套接字,分别是流式套接字、数据报式套接字和原始套接字。流式套接字(SOCKET_STREAM)提供了面向连接、双向可靠的数据流传输服务。数据报式套接字(SOCKET_ DGRAM)提供了无连接服务,不提供无错保证。原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可

45、以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW。Windows套接字SOCKET,是为Windows系统开发的一套标准通用支持网络协议数据通信的API,它是网络通信的基础,即TCP/IP的网络编程接口,1994年被定为网络编程标准后,主要经历了Winsock1.1和Winsock2.0两种版本,它产生最终目

46、的是可以适应应用程序开发者、网络服务商的需求,进程通过套接字的通信域来完成通信。需要指出的是,套接字主要负责控制数据的输入与输出,主要在传输层和网络层,屏蔽了数据链路层和物理层。原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可

47、以用来发送一些自定包头或自定协议的IP包。要使用原始套接字,必须经过创建原始套接字、设置套接字选项和创建并填充相应协议头这三个步骤,然后用send、WSASend函数将组装好的数据发送出去。接收的过程也很相似,只是需要用recv或WSARecv函数接收数据。4.5.1创建原始套接字我们可以用socket函数来创建原始套接字,因为原始套接字能直接控制底层协议,因此只有属于“管理员”组的成员,才有权创建原始套接字。下面是用socket函数创建原始套接字的代码。SOCKET sock;Socksocket (AF_INET, SOCK_RAW, IPPROTO_UDP);上述创建原始套接字的代码使用的是UDP协议,如果要使用其它的协议,比如ICMP、IGMP、IP等协议,只需要把相应的参数改为IPPROTO_ICM、IPPROTO_ IG

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号