IP数据包的捕获与分析文献综述
大作业2:IP包的截获和解析
数据部分
IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本。本程序主要针对版本是IPV4的数据包的解析。
报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的。因此,IP数据包的头长度在20—40B之间,是可变的。
u_char SrcMAC[6]; /* source HW addresss */
u_char Ethertype; /* ethernet type */
} DLCHEADER;
2、IP数据报格式
0 4 8 16 19 24 31
版本
报头标长
服务类型
总长度
标识
标志
片偏移
生存时间
协议
头校验和
源IP地址
三.主要数据结构
各种包头部、IP地址等的结构体定义在Header.h中。
1、以太网帧格式
因此,以太网帧头部的数据结构定义为:
typedef struct tagDLCHeader /*以太网数据帧头部结构*/
{
u_char DesMAC[6]; /* destination HW addrress */
目前,IPv4的报头结构为常用的ICMP报文包括ECHO-REQUEST(响应请求消息)、ECHO-REPLY(响应应答消息)、Destination Unreachable(目标不可到达消息)、Time Exceeded(超时消息)、Parameter Problems(参数错误消息)、Source Quenchs(源抑制消息)、Redirects(重定向消息)、Timestamps(时间戳消息)、Timestamp Replies(时间戳响应消息)、Address Masks(地址掩码请求消息)、Address Mask Replies(地址掩码响应消息)等,是Internet上十分重要的消息。后面章节中所涉及到的ping命令、ICMP拒绝服务攻击、路由欺骗都与ICMP协议息息相关。
IP数据包的捕获与解析
if(bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr) )==SOCKET_ERROR) • ………….
关键问题-设置网卡混杂模式
• 通常,网卡不能接收mac地址不是自己的IP数据包, 要想能捕获所有IP数据包,应该先将网卡的工作模 式设置为“混杂” • 代码: • DWORD dwBufferLen[10]; • DWORD dwBufferInLen=1; • DWORD dwBytesReturned=0; • WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof( dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&d wBytesReturned,NULL,NULL • …… • ……
关键问题-启动winsock
• 使用函数WSAStartup()完成winsock的启动 • int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData ); • 具体代码: 本程序请求使用的
Socket版本 版本 – WSADATA WSAData; – if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0) 返回请求的Socket版本 返回请求的 版本 的信息 –{ …… }
IP数据包的捕获与解析
• 编写程序捕获IP数据包,并将解析的结果显 示出来 • 本例中,我们要对IP包头除选项字段外的内 容进行解析
• 具体要求如下:
– 生成可执行文件PackParse.exe – 运行该文件的命令行格式为:
• PackParse pack_sum (pack_sum是要抓取的IP包的数量)
计算机网络课程设计IP数据包的捕获与分析.docx
计算机科学与技术学院课程设计成绩单C+:72~74分C:68~71分C-:64~67分D:60~63分F:<60分武汉科技大学计算机科学与技术学院制表IP数据包捕获与解析程序设计一、需求分析在本次课程设计要求捕获本机网卡的IP包,对捕获的IP包进行解析。
要求输出版本号、总长度、标志位、片偏移、协议、源地址和目的地址七个字段。
要求遵循RFC791的相关IP协议规定,捕获通过本地网卡的IP数据包。
实现对指定数量的IP数据包的捕获过程。
,需要定义好IP数据报等相关的数据结构以对IP数据包的各个字段进行保存,以及该IP数据包的上一层使用的协议名称。
在对IP数据包进行解析时要将捕获的数据流存储在一个缓冲区中。
二、概要设计1.总体流程算法:创建原始套接字并绑定本地网卡,将套接字设置为混杂模式监听网卡并根据输入的数量捕获流经本地的IP包。
IP数据包的格式:NoYes开始创建并初始化原始套接字填充sockaddr_in并绑定socket 设置网卡混杂模式监听网卡捕获和解析IP数据报输出解析字段结束是否达到需要次数IP数据包由首部和数据两部分组成。
首部的前一部分是固定长度,共 20 字节,是所有IP数据报必须具有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的,可选字段之后是数据部分。
其中,首部固定部分中本次课程设计需要解析的各字段的长度及意义如下:(1)版本占4位,指IP协议的版本。
通信双方使用的IP协议版本必须一致。
目前广泛使用的IP协议版本号为4(即IPv4)。
关于IPv6,目前还处于草案阶段。
(2)总长度总长度指首部和数据之和的长度,单位为字节。
总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。
当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
数据包的捕获与分析
数据包的捕获与分析随着数字化时代的到来,数据成为了生活中不可或缺的一部分。
无论是在个人生活还是商业领域,数据都扮演着重要的角色。
数据包的捕获与分析是一项关键的技术,它可以帮助我们更好地理解和利用数据。
一、数据包的捕获数据包是网络通信过程中的基本单位,它包含了传输的内容,比如电子邮件、网页浏览记录、聊天消息等。
数据包的捕获是指通过网络嗅探或使用专门的工具,将数据包拦截下来并保存下来以便后续的分析。
1.1 网络嗅探网络嗅探是一种通过截取网络上的数据包进行分析的技术。
嗅探器可以通过网络接口获取网络数据包,并将其保存到本地磁盘上。
这种方法可以帮助我们获取网络上的实时数据,并进行进一步的分析和处理。
1.2 抓包工具除了网络嗅探外,还有一些专门的抓包工具可以用来捕获数据包。
这些工具提供了更多的功能和选项,可以帮助用户更方便地进行数据包的捕获和分析。
常见的抓包工具有Wireshark、tcpdump等。
二、数据包的分析数据包的分析是指对捕获到的数据包进行解析和研究,从中获取有用的信息和洞察。
数据包分析可以帮助我们了解网络通信的细节,发现网络中的问题,或者进行网络安全分析。
2.1 解析协议数据包中包含了丰富的信息,例如源IP地址、目标IP地址、端口号、协议类型等。
通过对这些信息的解析,我们可以了解两台主机之间的通信流程和协议类型。
比如,通过分析数据包的源IP地址和目标IP地址,我们可以确定两台主机之间的通信关系。
2.2 分析应用层协议应用层协议是数据包中最高层的协议,它决定了数据包中的内容和格式。
通过分析应用层协议,我们可以了解具体的通信内容。
比如,通过分析HTTP协议,我们可以获取到网页浏览记录、网页标题、请求和响应的头部信息等。
2.3 发现网络问题数据包的分析也可以帮助我们发现网络中的问题。
通过分析网络通信流量和数据包的延迟、丢包情况,我们可以确定网络是否存在瓶颈或故障。
这对于网络管理员来说是非常重要的,可以帮助他们快速定位和解决网络问题。
实验二IP报文的捕获与分析
实验⼆IP报⽂的捕获与分析实验⼆ IP报⽂的捕获与分析——实验报告⼀、实验⽬的(1)掌握IP协议报⽂格式。
(2)对捕捉到的包进⾏IP分析。
⼆、实验内容⽤Wireshark过滤出IP数据包,查看并分析具体的IP包的内容。
三、实验原理1、wireshark简介Wireshark(前称Ethereal)是⼀个⽹络封包分析软件。
⽹络封包分析软件的功能是撷取⽹络封包,并尽可能显⽰出最为详细的⽹络封包资料。
在GNUGPL通⽤许可证的保障范围底下,使⽤者可以以免费的代价取得软件与其程式码,并拥有针对其源代码修改及客制化的权利。
Ethereal是⽬前全世界最⼴泛的⽹络封包分析软件之⼀。
Wireshark可以帮助⽹络管理员检测⽹络问题,帮助⽹络安全⼯程师检查资讯安全相关问题,开发者使⽤Wireshark来为新的通讯协议除错,普通使⽤者使⽤Wireshark来学习⽹络协定的相关知识当然,有的⼈⽤它来寻找⼀些敏感信息Wireshark不是⼊侵侦测软件(Intrusion DetectionSoftware,IDS)。
对于⽹络上的异常流量⾏为,Wireshark不会产⽣警⽰或是任何提⽰。
然⽽,仔细分析Wireshark撷取的封包能够帮助使⽤者对于⽹络⾏为有更清楚的了解。
Wireshark不会对⽹络封包产⽣内容的修改,它只会反映出⽬前流通的封包信息,它也不会送出封包⾄⽹络上2、IP数据报格式IP数据报TCP/IP协议定义了⼀个在因特⽹上传输的包,称为IP数据报(IP Datagram)。
这是⼀个与硬件⽆关的虚拟包,由⾸部和数据两部分组成。
⾸部的前⼀部分是固定长度,共20字节,是所有IP数据报必须具有的。
在⾸部的固定部分的后⾯是⼀些可选字段,其长度是可变的。
⾸部中的源地址和⽬的地址都是IP协议地址。
IP数据包格式如图1所⽰。
图1 IP报⽂格式上⽹查找资料,整理如下更详细更易懂的IP报⽂格式与字段含义:IP协议偏移量0~34~78~1516~1819~31偏移量0~34~78~1516~1819~31 0版本⾸部长度服务类型总长度32标识符标识分段偏移64存活时间协议⾸部校验和96源IP地址128⽬的IP地址160选项160或192+数据IP报⽂字段含义版本指 IP 协议所使⽤的版本。
最新实验二-IP数据包的捕获与解析
实验二IP数据包的捕获与解析网络09021.实验目的:掌握网络层的基本原理,通过编程实现网卡截取标准格式的IP包;解析IP数据包,了解IP包结构中个字段的含义与用途。
2.实验原理:IP数据报结构:3. 实验环境平台:Windows、编程环境:VC 6.0、语言:C++4流程图及源代码#include<iostream>#include<winsock2.h>#include<ws2tcpip.h>#include<fstream>#include <windows.h>#pragma comment(lib,"ws2_32") //指定连接到网络应用和internet#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)typedef struct IP_HEAD{union //定义联合{unsigned char Version;unsigned char HeadLen;};unsigned char ServiceType;unsigned short TotalLen; Array unsigned short Identifier;union{unsigned short Flags;unsigned short FragOffset;};unsigned char TimeToLive;unsigned char Protocol;unsigned short HeadChecksum;unsigned int SourceAddr;unsigned int DestinAddr;unsigned char Options;}ip_head; //定义IP头部的数据结构void main(int argc,char *argv[]){using namespace std;ofstream outfile("C:\\logfile.txt",ios::out);if(argc!=2){cout<<endl<<"请以下格式输入命令行return;}WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0){cout<<endl<<"WSASTartup初始化失败"<<endl;return;}SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP); //三个参分别为通信发生的区字段,套接字的类型,与IP协议if(sock==INVALID_SOCKET){cout<<endl<<"创建Socket失败!"<<endl;closesocket(sock);WSACleanup();}BOOL flag=TRUE;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *) &flag,sizeof(flag))==SOCKET_ERROR){cout<<endl<<"setsockopt操作失败:"<<WSAGetLastError()<<endl;closesocket(sock);WSACleanup();}char hostName[128];//获取主机名if(gethostname(hostName,100)==SOCKET_ERROR){cout<<endl<<"gethostname操作失败:"<<WSAGetLastError()<<endl;closesocket(sock);WSACleanup();}hostent *pHostIP; //获取本地IPif((pHostIP=gethostbyname(hostName))==NULL){cout<<endl<<"gethostbyname操作失败:"<<WSAGetLastError()<<endl;closesocket(sock);WSACleanup();}sockaddr_in host_addr;//host_addr.sin_family=AF_INET;host_addr.sin_port=htons(6000);host_addr.sin_addr=*(in_addr *)pHostIP->h_addr_list[0];if(bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr))==SOCKET_ERROR){cout<<endl<<"bind操作失败:"<<WSAGetLastError()<<endl;closesocket(sock); //绑定网卡WSACleanup();}DWORD dwBufferLen[10];DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;if(WSAIoctl(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen) , &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ERROR){cout<<endl<<"WSAIoctl操作失败:"<<WSAGetLastError()<<endl;closesocket(sock); //将网卡设为混杂模式,以接受所有数据WSACleanup();}cout<<endl<<"开始解析IP包:"<<endl;char buffer[65535]; //设置缓冲区int packsum=atoi(argv[1]); //字符串转换为整形for(int i=0;i<packsum;i++){if(recv(sock,buffer,65535,0)>0) //四个参数分别是套接字描述符,缓冲区的地址,缓冲区大小,附加标志{ip_head ip=*(ip_head *)buffer;cout<<"-----------------------"<<endl;cout<<"版本:"<<(ip.Version>>4)<<endl; //获取头部长度字段cout<<"头部长度:"<<((ip.HeadLen &0x0f)*4)<<endl; //获取头部长度字段cout<<"服务类型:Priority"<<(ip.ServiceType>>5)<<", Service"<<((ip.ServiceType>>1)&0x0f)<<endl;//优先级子域和TOS子域cout<<"总长度:"<<ip.TotalLen<<endl;//获取总长度字段cout<<"标识符:"<<ip.Identifier<<endl;//获取标识字段cout<<"标志位:"<<((ip.Flags>>15)&0x01)<<",DF= "<<((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)<<endl; //获得标志字段cout<<"片偏移:"<<(ip.FragOffset&0x1fff)<<endl; //获取分段偏移字段cout<<"生存周期:"<<(int)ip.TimeToLive<<endl; //获取生存时间字段cout<<"协议:Protocol"<<(int)ip.Protocol<<endl; //获取协议字段cout<<"头部校验和:"<<ip.HeadChecksum<<endl; //获取头校验和字段cout<<"原地址:"<<inet_ntoa(*(in_addr *)&ip.SourceAddr)<<endl; //获取源IP地址字段cout<<"目的IP地址:"<<inet_ntoa(*(in_addr *)&ip.DestinAddr)<<endl; //获取目的IP地址字段outfile<<"-----------------------"<<endl;outfile<<"版本:"<<(ip.Version>>4)<<endl;outfile<<"头部长度:"<<((ip.HeadLen &0x0f)*4)<<endl;outfile<<"服务类型:Priority"<<(ip.ServiceType>>5)<<", Service"<<((ip.ServiceType>>1)&0x0f)<<endl;outfile<<"总长度:"<<ip.TotalLen<<endl;outfile<<"标识符:"<<ip.Identifier<<endl;outfile<<"标志位:"<<((ip.Flags>>15)&0x01)<<",DF= "<<((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)<<endl;outfile<<"片偏移:"<<(ip.FragOffset&0x1fff)<<endl;outfile<<"生存周期:"<<(int)ip.TimeToLive<<endl;outfile<<"协议:Protocol"<<(int)ip.Protocol<<endl;outfile<<"头部校验和:"<<ip.HeadChecksum<<endl;outfile<<"原地址:"<<inet_ntoa(*(in_addr *)&ip.SourceAddr)<<endl;outfile<<"目的IP地址:"<<inet_ntoa(*(in_addr *)&ip.DestinAddr)<<endl;}}closesocket(sock);WSACleanup();}5.运行结果:。
计算机网络课程设计报告-IP数据包的捕获与分析
CENTRAL SOUTH UNIVERSITY计算机网络课程设计报告题目IP数据包的捕获与分析学生姓名廖成班级学号0902130408指导教师穆帅设计时间2015年11月目录第一章绪论 (3)1.1 课题研究背景 (3)1.2 课题研究的意义 (3)第二章课程设计的目的与要求 (3)2.1 课程设计的目的 (3)2.2 课程设计的要求 (4)第三章课程设计的内容 (4)3.1 课程设计的内容 (5)3.2 内容的要求 (5)第四章程序设计与分析 (5)4.1 IP数据包 (5)4.1.1 数据包的格式说明 (5)4.1.2 头部数据结构的定义 (7)4.2 部分程序实现 (7)4.2.1 套接字的使用 (7)4.2.2 数据库的使用 (8)4.2.3 各部分详细实现 (9)4.4 程序流程图 (12)4.4.1 主程序流程图 (12)4.4.2 捕获并分析数据包头部模块流程图 (13)4.4.3 头部信息存数据库模块 (13)第五章实验结果 (14)5.1 程序截图 (14)第六章总结 (16)6.1 实验心得 (16)第七章附录 (17)参考文献 (17)第一章绪论1.1 课题研究背景随着计算机技术的发展,网络的应用迅速普及,网络已日益成为生活中不可或缺的工具。
同时,网络的安全性与可靠性日益受到人们的重视,安全性指的是网络上的信息不被泄露、更改和破坏,可靠性指的是网络系统能够连续、可靠地运行,网络服务不被中断。
网络数据包捕获、监听与分析技术是网络安全维护的一个基础技术同时也是网络入侵的核心手段。
所以研究有关数据包捕获和分析技术对保证网络的健康、安全运行是很有意义的。
1.2课题研究的意义计算机之间进行通信时,交互的所有信息都封装在数据包中。
因此,通过采集网络数据并对其进行相应的分析,可以清楚地了解到进行通信的计算机的通信目的。
通过分析采集到的数据包可以确定网络是否受到入侵;其次也可以通过采集到的数据包来分析应用程序可能出现的问题及原因;此外,通过网络数据的采集和统计可以清楚地了解整个网络在各个时段内的网络负载情况,从而判断网络使用得是否合理。
计算机网络课程设计IP数据包解析(共5篇)
计算机网络课程设计IP数据包解析(共5篇)第一篇:计算机网络课程设计 IP数据包解析课设名称:IP数据包解析班级:学号:姓名:指导老师:日期: 2012.6.15计算机网络课程设计报告目录1.课程设计目的 (1)2.课程设计要求 (1)3.程序设计分析 (1)3.1 网卡设置 (1)3.2 使用套接字 (2)3.2.2 接收数据包 (2)3.3 定义IP头部的数据结构 (3)3.4 IP包的解析 (3)3.5 协议的定义 (4)3.6捕获处理 (4)4.运行结果 (5)5.总结 (5)6.源程序代码 (6)Ip数据包解析1.课程设计目的本课程设计的目的就是设计一个捕获并解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP 层的工作原理有更好的理解和认识。
2.课程设计要求本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile则代表记录结果的日志文件。
2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3)当程序接收到键盘输入Ctrl+C时退出3.程序设计分析3.1 网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。
但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。
对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地Ip数据包解析址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。
我们要想获取网络设备的所有数据包,就是需要将网卡设置为混杂模式。
网络数据传输管理技术的数据包捕获与分析(四)
网络数据传输管理技术的数据包捕获与分析随着互联网的迅速发展和普及,网络数据传输已经成为现代社会的重要组成部分。
无论是个人用户还是企业机构,都需要依靠网络进行数据传输和通讯。
在这个过程中,数据包是网络数据传输的基本单位,它包含了从发送端到接收端的所有信息。
在网络数据传输管理技术中,对数据包的捕获与分析是至关重要的一环。
数据包的捕获是指通过网络抓包工具捕获网络数据传输过程中的数据包,并对其进行记录、存储和分析。
这项工作可以帮助网络管理员或安全专家监控网络流量、发现网络问题、分析网络性能和进行安全审计。
而数据包的分析则是对捕获到的数据包进行深入的解析和研究,以便更好地理解网络传输过程中的细节和问题。
数据包的捕获与分析技术在网络管理中起着至关重要的作用。
首先,它可以帮助管理员监控网络流量,及时发现网络故障并进行排除。
当网络出现异常时,通过对捕获到的数据包进行分析,可以快速定位问题的根源,从而加快故障修复的速度。
其次,通过捕获和分析数据包,管理员可以了解网络用户的行为和需求,从而更好地优化网络性能和提升用户体验。
最后,数据包的捕获与分析也是网络安全工作的重要手段,它可以帮助防范网络攻击、检测恶意软件和保护网络数据安全。
在实际的网络管理工作中,有许多专业的数据包捕获与分析工具可供选择。
其中最知名的工具之一是Wireshark,它是一款开源的网络协议分析软件,可以捕获和分析网络数据包。
Wireshark支持多种网络协议的解析,可以帮助管理员深入了解网络通信的细节和问题。
除此之外,还有一些商业化的网络流量分析工具,如SolarWinds、PRTG等,它们提供了更加丰富的功能和更加友好的用户界面。
在进行数据包捕获与分析时,需要注意一些技术细节。
首先,要选择合适的捕获点,以确保能够捕获到需要的数据包。
其次,对捕获到的数据包进行存储和管理,可以使用专门的数据包存储设备或软件。
最后,对数据包进行分析时,需要结合实际情况和需求进行深入分析,以获得更加准确和有用的信息。
IP地址的数据包捕获与分析
IP地址的数据包捕获与分析随着互联网的快速发展,我们生活中离不开网络。
而网络通信中的IP地址则是连接和识别设备的重要标识。
本文将介绍IP地址数据包捕获与分析的相关内容。
一、IP地址的基本概念与分类IP地址全称为Internet Protocol Address,它由32位或128位二进制数组成,用于唯一标识一个网络设备。
IP地址按照版本分为IPv4和IPv6,其中IPv4采用32位地址,IPv6采用128位地址。
IPv4地址由四组十进制数表示,每组数值范围为0-255,如192.168.0.1。
二、数据包捕获工具介绍1. WiresharkWireshark是一款功能强大的网络数据包分析工具,它可以捕获和分析网络中的IP数据包。
使用Wireshark可以了解网络流量、排查网络故障、进行安全分析等。
2. TCPDumpTCPDump是一个命令行下的数据包捕获工具,它可以实时监测网络流量,并将捕获到的数据包输出到终端或存储为文件。
TCPDump功能简单实用,常用于服务器环境下的网络故障排查。
三、IP地址数据包捕获与分析的步骤1. 设置捕获过滤器在使用Wireshark或TCPDump进行数据包捕获前,我们可以设置过滤器以仅捕获感兴趣的数据包。
常用的过滤器包括基于源或目的IP地址、协议类型、端口号等进行筛选。
2. 启动数据包捕获使用Wireshark或TCPDump启动网络数据包捕获功能后,程序会开始在指定的网络接口上监听数据包。
捕获过程中,所有通过该接口传输的数据都会被记录下来。
3. 分析捕获的数据包捕获到数据包后,我们可以使用Wireshark提供的分析功能进行深入研究。
通过对数据包的源地址、目的地址、协议类型等进行分析,可以了解网络中的通信情况、设备间的交互等信息。
四、IP地址数据包分析的应用1. 网络故障排查通过分析捕获的数据包,我们可以检查网络中是否存在丢包、延迟、冲突等问题,进而定位和解决故障,提高网络性能。
网络数据包捕获及分析.
1西安电子科技大学计算机应用陕西7100712平鲁区职业中学山西036000网络数据包捕获及分析卢建华1蒋明1陈淑芳2摘要:网络数据包捕获及分析主要实现了对网络上的数据包进行捕获及分析。
包捕获功能模块主要是利用原始套接字对网络层的数据进行抓包。
在包分析功能模块,根据报文协议的格式,把抓到的包进行解析,从而得到网络层和传输层协议的报头内容。
关键词:包捕获;套接字;网络协议0引言目前,网络上的数据流量与日俱增,随之而来的网络安全问题也日渐重要。
无论是实现防火墙,NAT 还是VPN,首先就是获得网络数据包,在此基础上才能进行下一步的工作。
因此研究数据包捕获及分析技术具有极其重要的意义。
本文介绍了利用RAW SOCKET 进行网络数据包捕获的原理,并且开发了一个程序模型来探讨捕获数据包实现的方法。
1原理1.1数据收发以太网是基于广播方式传送数据的,也就是说,通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都对应惟一的硬件地址,即网卡MAC 地址。
正常情况下,一个网络接口应该只响应两种数据帧:①与自己硬件地址相匹配的数据帧;②向所有计算机的广播数据帧。
在实际系统中由网卡来完成数据的收发。
网卡接收到传来的数据,网卡内的程序接收数据帧的目的MAC 地址,然后根据网卡驱动程序设置的接收模式判断:认为应该接收,就在接收后产生中断信号通知CPU;认为不该接收就丢掉不管。
CPU 得到中断信号产生中断,操作系统就根据网卡驱动程序设置的网卡中断程序地址调用驱动程序接收数据。
驱动程序接收数据后,放入信号堆栈让操作系统处理。
对于网卡来说一般有4种接收模式:①广播方式:该模式下的网卡能够接收网络中的广播信息。
②组播方式:该模式下的网卡能够接收组播数据。
③直接方式:该模式下只有目的网卡才能接收数据。
④混杂模式:该模式下的网卡能够接收一切通过它的数据。
所以要想实现对网络的数据进行获取分析,首先应该把网卡设置成混杂模式。
大作业2:IP包的截获和解析资料
IP包的截获和解析实验报告Q1201012 刘倩君一.实验目的:设计一个能够截获并解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP 协议的相关问题,从而IP层的工作原理有更好的理解和认识。
二.实验要求:本实验的目标是捕获网络中数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件.程序的具体要求如下:1、能够捕获以太网数据帧,并且能够解析:数据包类型,数据包长度,源、目的MAC,2、如果是IP数据包,则进行进一步解析。
输出版本,头长度,服务类型,数据包总长度,数据包标识,分段标志,分段偏移值,生存时间,上层协议类型,头校验和,源IP地址和目的IP地址等内容.3、在指定的日志文件中写入网卡、时间、数据包解析结果等内容。
当程序接收到键盘输入Ctrl+C时退出.三.主要数据结构各种包头部、IP地址等的结构体定义在Header.h中。
1、以太网帧格式因此,以太网帧头部的数据结构定义为:typedef struct tagDLCHeader /*以太网数据帧头部结构*/{u_char DesMAC[6]; /* destination HW addrress */u_char SrcMAC[6]; /* source HW addresss */u_char Ethertype; /* ethernet type */} DLCHEADER;2、IP 数据报格式0 4 8 16 19 24IP 数据包的第一个字段是版本字段,其度是4位,表示所使用的IP 协议的版本。
本程序主要针对版本是IPV4的数据包的解析。
报头标长字段为4位,它定义了以4B 为一个单位的IP 包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的。
因此,IP 数据包的头长度在20—40B 之间,是可变的。
服务类型字段共8位,用于指示路由器如何处理该数据包。
总长度字段为2B,它定义了以字节为单位的数据包的总长度,IP 数据包的最大长度为65535B 。
计算机网络课程设计IP数据包的捕获与分析
CENTRAL SOUTH UNIVERSITY计算机网络课程设计报告目录第一章课程设计的目的与要求 (1)1.1 课程设计的目的 (1)1.2 课程设计的要求 (1)第二章课程设计的内容 (3)2.1 课程设计的内容 (3)2.2 内容的要求 (3)第三章程序分析与设计 (4)3.1 IP数据包 (4)3.1.1 IP数据包的格式说明 (4)3.1.2 IP数据包的格式 (4)3.1.3 IP数据包的C++定义 (5)3.1.4 IP数据包的解析 (6)3.2 套接字 (7)3.1.4 套接字的使用 (7)3.1.4 使用原始套接字 (7)3.3 接受数据包 (7)第四章实验结果 (10)4.1 程序截图 (10)第五章总结 (11)5.1 实验心得 (11)第六章附录 (12)6.1 源代码 (12)第一章课程设计的目的与要求1.1 课程设计的目的计算机网络课程设计的目的,是为了让学生更深入地掌握计算机网络的核心内容,实现理论与实践相结合。
让学生用具体的实践成果,体现对理论知识的掌握程度。
有利于学生提高计算机网络的实践能力,加深对计算机网络理论知识的理解。
1.2 课程设计的要求(1)编写程序,实现系统的基本功能,鼓励自行增加新功能;(2)要有用户界面:要求至少采用文本菜单界面;鼓励采用图形菜单界面;(3)写课程设计报告,内容包括:●封面(参见附录I)●需求分析:以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?给出功能模块图和流程图。
同时明确规定:输入的形式和输出值的范围;输出的形式;程序所能够达到的功能;测试数据,包括正确的输入与其输出结果和含有错误的输入与其输出结果。
●概要设计:包括程序设计组成框图,程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。
●详细设计:包括模块功能说明(如函数功能、入口与出口参数说明,函数调用关系描述等),每个模块的算法设计说明(可以是描述算法的流程图)。
网络数据包的捕获与分析大学学位论文
网络数据包的捕获与分析王行(陕西理工学院数学与计算机科学学院网络工程专业1101班,陕西汉中 723003)指导教师:贾伟【摘要】网络数据包的捕获对于网络安全有着巨大的作用,为我们更好的分析网络中的数据流提供了帮助。
本论文是基于Windows下开发一个网络监听工具,侧重点在于实现网络数据包的捕获,然后分析并显示捕获到的数据包信息这部分功能的实现,如分析:IP首部协议类型、源IP、目的IP和端口号等。
采用的是Winpcap(Windows Packet Capture)来实现的抓包功能。
通过VC++6.0中MFC编程实现通过一个完整界面来控制调用Winpcap中的函数来实现对网卡信息的捕获和循环捕获数据包,然后通过预先对于IP、TCP、UDP等数据包的定义和TCP/IP等协议来解析其中包含的内容并返回显示捕获到数据包的信息,当然也可以保存捕获到的数据包到指定地点以便进一步分析。
【关键词】Winpcap;数据包;捕获;分析The Capture and Analysis of Network Data PacketsWang Hang(Grade 11,Class 1, Major Network Engineering, Scho ol of Mathematics andComputer Science Dept, Shaanxi University of Technology, Hanzhong 723003, Shaanxi)Tutor: Jia WeiAbstract: The capture of network data packets plays an important part in network security, which is helpful for our better analysis of network data flow.This paper is about a network monitoring tool based on Windows system, which emphasizes particularly on realizing the capture and analysis of network data packets and then displays them. Take analysis as an example, it will check the type of the IP protocol, the source address of IP, the destination address of IP and the port e the Winpcap(Windows Packet Capture)to capture of data packets. In MFC programming of VC++6.0, the capture of network data packets can be realized via the invoking and control of the functions through a full control panel, and then the analysis of IP ,TCP,UDP and TCP/IP will be done before they are displayed. Certainly the information captured can be saved to the appointed destination in order to go through an advanced analysis.Key words:Winpcap;Data Packets;Capture;Analysis目录引言 (1)1概述 (2)1.1课题背景 (2)1.2国内外研究现状 (2)1.3课题研究的意义 (2)1.4课题研究的内容 (2)2相关知识介绍 (3)2.1TCP/IP协议简介 (3)2.1.1什么是 TCP/IP (3)2.1.2TCP/IP整体构架概述 (3)2.1.3TCP/IP中的协议 (3)2.2W IN P CAP开发技术详解 (5)2.2.1Winpcap介绍 (5)2.2.2Winpcap 的组成 (6)2.2.3Winpcap 数据结构 (7)2.2.4Winpcap 函数 (7)3系统设计方案及功能描述 (9)3.1系统设计方案 (9)3.2系统功能描述 (9)4系统编码实现 (11)4.1网络数据包捕获模块的实现 (11)4.1.1网络数据包捕获程序的编写过程 (11)4.1.2在程序中用到的WinPcap内核函数详细介绍 (12)4.1.3网络数据包捕获的应用 (13)4.2网络数据包分析模块的实现 (14)4.2.1网络数据包分析模块主要建立的类 (14)4.2.2IP协议分析类的设计 (14)4.2.3TCP协议分析类的设计 (15)4.2.4UDP协议分析类的设计 (17)4.2.5系统中变量函数的设计 (17)4.3主界面构造 (17)5软件测试 (19)总结 (21)参考文献 (22)致谢 (23)科技外文文献 (24)外文文献翻译 (36)附录A:软件开发源代码 (47)附录B:软件使用说明书 (65)引言随着网络技术的不断发展,通过网络将人与人的距离拉近,因此网络为来自世界各地不同的人、团体、机构构建了一个网络村。
最新实验二-IP数据包的捕获与解析
实验二IP数据包的捕获与解析网络09021.实验目的:掌握网络层的基本原理,通过编程实现网卡截取标准格式的IP包;解析IP数据包,了解IP包结构中个字段的含义与用途。
2.实验原理:IP数据报结构:3. 实验环境平台:Windows、编程环境:VC 6.0、语言:C++4流程图及源代码#include<iostream>#include<winsock2.h>#include<ws2tcpip.h>#include<fstream>#include <windows.h>#pragma comment(lib,"ws2_32") //指定连接到网络应用和internet#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)typedef struct IP_HEAD{union //定义联合{unsigned char Version;unsigned char HeadLen;};unsigned char ServiceType;unsigned short TotalLen; Array unsigned short Identifier;union{unsigned short Flags;unsigned short FragOffset;};unsigned char TimeToLive;unsigned char Protocol;unsigned short HeadChecksum;unsigned int SourceAddr;unsigned int DestinAddr;unsigned char Options;}ip_head; //定义IP头部的数据结构void main(int argc,char *argv[]){using namespace std;ofstream outfile("C:\\logfile.txt",ios::out);if(argc!=2){cout<<endl<<"请以下格式输入命令行return;}WSADATA WSAData;if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0){cout<<endl<<"WSASTartup初始化失败"<<endl;return;}SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP); //三个参分别为通信发生的区字段,套接字的类型,与IP协议if(sock==INVALID_SOCKET){cout<<endl<<"创建Socket失败!"<<endl;closesocket(sock);WSACleanup();}BOOL flag=TRUE;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *) &flag,sizeof(flag))==SOCKET_ERROR){cout<<endl<<"setsockopt操作失败:"<<WSAGetLastError()<<endl;closesocket(sock);WSACleanup();}char hostName[128];//获取主机名if(gethostname(hostName,100)==SOCKET_ERROR){cout<<endl<<"gethostname操作失败:"<<WSAGetLastError()<<endl;closesocket(sock);WSACleanup();}hostent *pHostIP; //获取本地IPif((pHostIP=gethostbyname(hostName))==NULL){cout<<endl<<"gethostbyname操作失败:"<<WSAGetLastError()<<endl;closesocket(sock);WSACleanup();}sockaddr_in host_addr;//host_addr.sin_family=AF_INET;host_addr.sin_port=htons(6000);host_addr.sin_addr=*(in_addr *)pHostIP->h_addr_list[0];if(bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr))==SOCKET_ERROR){cout<<endl<<"bind操作失败:"<<WSAGetLastError()<<endl;closesocket(sock); //绑定网卡WSACleanup();}DWORD dwBufferLen[10];DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;if(WSAIoctl(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen) , &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ERROR){cout<<endl<<"WSAIoctl操作失败:"<<WSAGetLastError()<<endl;closesocket(sock); //将网卡设为混杂模式,以接受所有数据WSACleanup();}cout<<endl<<"开始解析IP包:"<<endl;char buffer[65535]; //设置缓冲区int packsum=atoi(argv[1]); //字符串转换为整形for(int i=0;i<packsum;i++){if(recv(sock,buffer,65535,0)>0) //四个参数分别是套接字描述符,缓冲区的地址,缓冲区大小,附加标志{ip_head ip=*(ip_head *)buffer;cout<<"-----------------------"<<endl;cout<<"版本:"<<(ip.Version>>4)<<endl; //获取头部长度字段cout<<"头部长度:"<<((ip.HeadLen &0x0f)*4)<<endl; //获取头部长度字段cout<<"服务类型:Priority"<<(ip.ServiceType>>5)<<", Service"<<((ip.ServiceType>>1)&0x0f)<<endl;//优先级子域和TOS子域cout<<"总长度:"<<ip.TotalLen<<endl;//获取总长度字段cout<<"标识符:"<<ip.Identifier<<endl;//获取标识字段cout<<"标志位:"<<((ip.Flags>>15)&0x01)<<",DF= "<<((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)<<endl; //获得标志字段cout<<"片偏移:"<<(ip.FragOffset&0x1fff)<<endl; //获取分段偏移字段cout<<"生存周期:"<<(int)ip.TimeToLive<<endl; //获取生存时间字段cout<<"协议:Protocol"<<(int)ip.Protocol<<endl; //获取协议字段cout<<"头部校验和:"<<ip.HeadChecksum<<endl; //获取头校验和字段cout<<"原地址:"<<inet_ntoa(*(in_addr *)&ip.SourceAddr)<<endl; //获取源IP地址字段cout<<"目的IP地址:"<<inet_ntoa(*(in_addr *)&ip.DestinAddr)<<endl; //获取目的IP地址字段outfile<<"-----------------------"<<endl;outfile<<"版本:"<<(ip.Version>>4)<<endl;outfile<<"头部长度:"<<((ip.HeadLen &0x0f)*4)<<endl;outfile<<"服务类型:Priority"<<(ip.ServiceType>>5)<<", Service"<<((ip.ServiceType>>1)&0x0f)<<endl;outfile<<"总长度:"<<ip.TotalLen<<endl;outfile<<"标识符:"<<ip.Identifier<<endl;outfile<<"标志位:"<<((ip.Flags>>15)&0x01)<<",DF= "<<((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)<<endl;outfile<<"片偏移:"<<(ip.FragOffset&0x1fff)<<endl;outfile<<"生存周期:"<<(int)ip.TimeToLive<<endl;outfile<<"协议:Protocol"<<(int)ip.Protocol<<endl;outfile<<"头部校验和:"<<ip.HeadChecksum<<endl;outfile<<"原地址:"<<inet_ntoa(*(in_addr *)&ip.SourceAddr)<<endl;outfile<<"目的IP地址:"<<inet_ntoa(*(in_addr *)&ip.DestinAddr)<<endl;}}closesocket(sock);WSACleanup();}5.运行结果:。
IP数据包的捕获与解析
3、数据包的捕获机制
网络数据包截获机制一般指通过截获整个网络的所有信息流,根据信息源主机,目标主机, 服务协议端口等信息,简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更高层的应用程 序进行分析[2]。
cout<<"Version:"<<inet_ntoa(*(in_addr*)&ip.Version)<<endl; cout<<"HeadLen:"<<inet_ntoa(*(in_addr*)&ip.HeadLen)<<endl; cout<<"ServiceType: "<<inet_ntoa(*(in_addr*)&ip.ServiceType)<<endl; cout<<"TotalLen:"<<inet_ntoa(*(in_addr*)&ip.TotalLen)<<endl; cout<<"Identifier: "<<inet_ntoa(*(in_addr*)&ip.Identifier)<<endl; cout<<"Flags:"<<inet_ntoa(*(in_addr*)&ip.Flags)<<endl; cout<<"FragOffset: "<<inet_ntoa(*(in_addr*)&ip.FragOffset)<<endl;
网络数据包的捕获和分析
示界面 。 其次 , 是设置 网卡的模式。 该系统是利用套接字来捕获
数据包 , 先要创建原始套接字 , 原始套接字进 行初始 化, 对 并把
根 据 研 究 方 向的 不 同 , 据 的 获 取 有 不 同 的 方 法 。 数 据 获 它 绑 定 在 本 地 网 卡 , 置 套 接 字 和 网 卡 的模 式 。然后 , 捕获 数 数 设 是 调 从 取 最 主 要 的类 型 有 两 种 : 过 数 据 链 路 层 获 取 和 通 过 网 络 层 获 据 包 。启 动 接 收 线 程 , 用 函数 获 取 消 息线 程 , 中 取 得 线 程 通
通 过 原 始套 接 字 可 以获 取 IM 、C 、D 等 数 据 包 。 CPTPUP
三、 网络 数 据 包 捕获 的系 统 方 案 设 计
的I P协议 中“ 协议 ” 段的值在组 合框 中选择 不同的协议 , 字 并
把该协 议的解析 结果显示在控 件 中。该 系统能够解析 四种协
议, I 即 P协 议 、C 协 议 、D TP U P协 议 和 I ̄ CI 议 。 P协
储 在 缓 冲 存 储 器 中 , 后 通 过 分 析 模 块 对 它 进 行 分 析 , 到 网 中定义 协议相关的结构和 宏,声明一个线程 函数为友员函数 , 然 得 设定 显 络层 和 传 输 层 协 议 的报 头 内容 。网络 数 据 包 捕 获 程 序 依赖 于 一 它负责监听网络 数据报。接下来对 对话框进 行初始化,
有 数 据 , 一 个 网 络 接 口都 有 一 个 唯 一 的 硬 件 地 址 , 是 网 卡 能。 每 就 在包捕获 的具体实现之前, 首先是设置网卡的模式 。 主要包 的 M C地址 。在 正常 的情 况下 , 个 网络 接 口应 该 只 响应 两种 括 : A 一 创建 原始 套接字 ; 设置 I P头操作选 项 , 中 f a 其 lg设置 为
ip数据包的捕获与解析.
计算机网络与通信课程设计报告实验项目名称 IP数据包的捕获与解析实验学生班级电力通信122实验学生学号 208120529 实验学生姓名颜辉同组学生姓名无实验时间12.15~12.19实验地点信息楼C322实验成绩评定指导教师签字2014 年 12 月 20 日目录一.课程设计应达到的目的--------------------------------1二.课程设计题目及要求----------------------------------1三.课程设计思想----------------------------------------1四.课程设计流程图--------------------------------------3 五.部分程序设计的分析---------------------------------3 六.IP数据包解析代码-----------------------------------6 七.运行结果-------------------------------------------11 八.总结-----------------------------------------------11 九.参考文献-------------------------------------------12一.课程设计应达到的目的(1)使学生掌握网络通信协议的基本工作原理;(2)培养学生基本掌握网络编程的基本思路和方法;(3)能提高学生对所学计算机网络理论知识的理解能力;(4)能提高和挖掘学生对所学知识的实际应用能力和创新能力;(5)提高学生的科技论文写作能力。
二.课程设计题目及要求IP数据包捕获与解析的设计。
设计任务:(1)掌握IP数据包的工作原理与报头设计的相关字段(2)理解IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移量、生存时间、上层协议类型、头校验合、源IP地址和目的IP地址等内容。
数据包的捕获与分析
不同的操作系统实现的底层包捕获机制可能是不一样的, 但从形式上看大同小异。数据包常规的传输路径依次为网卡、 设备驱动层、数据链路层、IP层、传输层、最后到达应用程 序。而包捕获机制是在数据链路层增加一个旁路处理,对发 送和接收到的数据包做过滤/缓冲等相关处理,最后直接传 递到应用程序。值得注意的是,包捕获机制并不影响操作系 统对数据包的网络栈处理。对用户程序而言,包捕获机制提 供了一个统一的接口,使用户程序只需要简单的调用若干函 数就能获得所期望的数据包。包过滤机制是对所捕获到的数 据包根据用户的要求进行筛选,最终只把满足过滤条件的数 据包传递给用户程序。
可以用一个形象一些的例子对数据包的概念加以说明:在邮局 邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时 候只用产品原包装盒来包装显然是不行的。必须把内装产品的包 装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里, 产品包装盒相当于数据包,里面放着的产品相当于可用的数据, 而专用纸箱就相当于帧,且一个帧中只有一个数据包。 1.2数据包结构
目录 上一页 下一页 退出
数据包的捕获与分析
图5-12中为IP数据包,其中版本域长度为4个比特,表示了IP数 据包的版本。现在IP的版本是4,通常被表示为Ipv4。下一个版本正 在发展,为Ipv6。这个版本在很多方面,尤其是寻址方面,完全是 一个崭新的方式。虽然现在Ipv6在InternetⅡ项目中获得了应用,但由 于现在还未普及,这里将不做讨论。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
毕业设计(论文)文献综述还有同名论文、任务书、和其他文件题目: IP数据包的捕获与分析姓名:学号:系别:专业:年级:指导教师:(签名)年月日一、研究背景随着社会的飞速发展,科技的日新月异,互联网已经渗透到世界的各行各业和人民生活的各个方面,全社会对网络的依赖程度只增不减,整个世界通过网络正快速的融为一体,网络时代已经来临。
但由于网络具有开放性,互联性,多样性,不均匀性等诸多特征,以至于网络中存在许多风险,例如黑客攻击,恶意软件等。
这些风险的存在,严重的危险到网络上信息的完整性、保密性、真实性、可靠性。
所以网络安全问题已越发受到人们的关注,而想要解决这些问题涉及的内容既有技术方面的问题,也有管理方面的问题,两方面相互补充,缺一不可。
技术方面主要侧重于防范外部非法用户的攻击,管理方面则侧重于内部人为因素的管理。
如何更有效地保护重要的信息数据、提高计算机网络系统的安全性已经成为所有计算机网络应用必须考虑和必须解决的一个重要问题。
可以这样来定义网络数据安全:所谓网络数据安全,指的是网络系统的硬件、软件和数据信息能够受到保护,不会因为偶然或恶意的原因而遭到破坏、更改、泄露,同时系统能够连续、可靠地运行,网络服务不被中断。
但在现实中,绝对安全的网络是没有的。
目前,我正处在高速的现代化建设阶段,政府部门、军队、企业、学校等都需要建立自己的网络和信息系统并实施保护,尤其是有关的重要部门更需要需要网络的安全保障。
所以建立网络安全系统对我们具有重大的意义,而有效的实时监控和捕获可疑的网络信息就是建立网络安全系统的基础。
二、研究意义随着个人计算机和互联网的普及,使我们从一个封闭的环境进入到一个开放的世界,越来越多的人开始使用网络这个媒介来发送,接收信息,计算机网络给人们生产和生活带来了巨大的便利。
但是由于网络是一个面向大众的开放系统,它的这种特性决定了其对数据信息的保密和系统的安全性考虑并并不完备,存在着诸多的安全隐患。
因此让有些个人或团体有机可乘,利用这些隐患和漏洞,通过网络来发送一些包含色情,反动等不良内容的信息,或通过网络入侵他人主机盗取信息和机密,达到破坏正常社会秩序的目的,以至于计算机网络的安全形势日趋严峻。
因此,现在在计算机网络安全隐患中扮演重要角色之一的网络数据抓包软件受到越来越大的关注。
构建安全网络环境,除了通过主动的人为思想的预防以外,一套被动的网络安全检测机制也是必不可少的,通过运用标准的机制对网络中传输的各类型进行实时监控,对具有威胁性的信息进行甄别警报,这套机制的前提就是首先对网络中传输的信息进行捕获,对获取的信息解析筛查。
而想要捕获这些信息,就要知道网络中的信息是以数据包的形式进行传输,想要获取信息,就必须对网络中的数据包进行捕获和分析,才能获得所需要的相应信息。
所以对网络上传送的数据包进行有效的捕获与解析是目前网络监控的关键技术,只有能够进行高效的网络数据包捕获和解析,才能为网管人员听过相应的数据进行分析或其他操作,从而进一步的施行网络安全监控和管理。
IP数据包是网络中最常见的数据包类型,而IP也是TCP/IP协议族中最为核心的协议。
所含有有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输,其中又主要以TCP 和UDP两种数据类型为多数[1]。
所以掌握了对IP数据包的捕获与分析技术,就能对网络中传输的大部分数信息进行监控和管理[2]。
三、相关技术研究(1)IP数据包的格式互联网层是TCP/IP协议参考模型中的关键部分。
IP协议把传输层送来的消息组装成IP数据包,并把IP数据传递给数据链路层。
IP协议在TCP/IP协议族中处于核心地位,IP 协议制定了统一的IP数据包格式,以消除各通信子网间的差异,从而为信息发送方和接收方提供了透明的传输通道。
编制本程序前,首先要对IP包的格式有一定的了解。
图1给出了IP协议的数据包格式。
IP数据包的第一字段是版本字段,其长度为4位,表示所使用的IP协议的版本。
目前的版本IPV4,版本字段的值为4,下一代的版本是IPV6,版本字段的值为6。
本程序主要针对版本值为4的IP数据包的解析。
报头标长(IHL)字段为4位,它定义了以4B为一个单位的IP包的报头长度。
报头除了选项字段和填充域字段外,其他各字段是定长的。
因此,IP数据包的头长度在20-40B之间,是可变的。
图1 IP数据报格式(2)以太网捕获数据包的实现原理在以太网上通讯的每张网卡上都拥有一个全球唯一的物理地址,也叫MAC地址。
该地址是一个48比特的二进制数。
在以太网卡中内建有一个数据包过滤器。
该数据包过滤器的作用是保留以本身网卡的MAC地址为通讯目的的数据包和广播数据包,丢弃所有其它无关的数据包,以免CPU对无关的数据报作无谓的处理。
这是以太网卡在一般情况下的工作方式。
因此在正常情况下,一个合法的网络接口应该只响应这样的两种数据包(帧):一种是帧的目标地址具有和本地网络接口相匹配的硬件地址。
另一种是帧的目标地址是“广播地址”(代表所有的接口地址),格式为。
在接收到上面两种情况的数据帧时,网卡通过CPU产生中断,操作系统进行中断处理后将帧中包含的数据传送给上层系统进行进一步处理。
在其他情况下数据帧将被丢弃而不作处理。
要想捕获到流经网卡的不属于本主机的数据,必须绕过系统正常工作的处理机制,直接访问网络底层。
我们可以把网卡的状态设为“混杂”(promiscuous)模式,当网卡工作在这种“混杂”模式时,该网卡就具备了“广播地址”,它对所接收到的每一个帧都产生一个硬件中断以提醒操作系统处理流经该网卡上的每一个报文包。
操作系统通过直接访问链路层,截获相关数据,由应用程序而非上层协议(如IP层、TCP层)对数据过滤处理,这样就可以捕获到流经网卡的所有数据。
(3)开发语言C++C++是一九八三年由贝尔实验室的Bjarne Strou-strup在C的基础上推出。
C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。
C++目前流行的编译器最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 2012。
C++语言灵活,功能强大,类层次结构性强,标准定义细致严谨,具有快速和可移植性和面向对象特性,并兼容C语言的几乎所有特性,可扩展性强,很适合编写类库,效率高,运行处理速度快,大部分游戏软件都使用C++编写[3]。
所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。
因而也使得其过度复杂和标准库的过度苍白,掌握起来有一定难度。
(4)开发框架MFCMFC(Microsoft Foundation Classes),是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
微软基础类MFC(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,随微软Visual C++开发工具发布。
该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject 直接或间接派生,只有少部分类例外[4]。
(5)WinPcap技术WinPcap是用于网络封包捕获的一种工具,是在32位的操作平台上解析网络封包工具,包含了核心的封包过滤,一个底层动态链接库,和一个高层系统函数库和可用来直接存取封包的应用程序界面。
WinPcap是一个免费公开的软件系统,它用于windows系统下的直接的网络编程[5]。
WinPcap可以为用户提供了一个强大的编程接口,在各个操作系统之间进行移植较强,方便于程序员对WinPcap进行开发。
因此许多不同的工具软件都会使用WinPcap用于对网络的分析,故障的排除,网络安全的监控等方面[6]。
现今,在一些常用领域,WinPcap 也尤为适用,例如:1、网络及协议分析2、网络监控3、通信日志记录4、traffic generators5、用户级别的桥路和路由6、网络入侵检测系统(NIDS)7、网络扫描8、安全工具四、结论通过搜索和学习各种数据包捕获分析和C++编程方面的资料和文献,以及参考了网络上的案例、分析数据包捕获技术的现状以及未来的发展趋势,规划且设计出一个符合课题需求的方案。
在解决本课题过程中,遇到的多数问题与困难大多都是通过网络这一途径查找并解决,可见一个良好安全的网络对于这个时代的重要性,而数据包捕获与监控技术作为基础也十分值得研究和学习。
在今后的时间里,将继续努力学习相关知识,完善课题的设计与实现。
参考文献[1] 谢希仁.计算机网络第五版[M]. 北京:电子工业出版社.2008.1.122-126.[2] W.Richard Stevens.TCP/IP详解卷1:协议[M]. 北京:机械工业出版社.2000,55~58.[3] 钱能.C++程序设计教程修订版[M]. 北京:清华大学出版社.2009.7.55-226.[4] 邓振杰.C++程序设计[M]. 北京:人民邮电出版社.2005.7.12-79.[5] 沈辉,张龙.基于winpcap的网络数据监测及分析[J]. 北京:计算机科学.2012.25.[6] 费绍敏.基于Winpcap的网络监控系统的设计与实现[J]. 成都:通信技术.2009,6(1):2~3.[7] Bruce Eckel.Java.编程思想(第4版)[M]. 上海:上海大学出版社.2007,15~17.[8] Andrew S.Tanenbaum..计算机网络[M]. 北京:清华大学出版社.1998,98~100.[9] Douglas er.TCP/IP网络互连技术[M]. 北京:清华大学出版社.1998,76~79.[10] 刘芳.网络流量监测与控制[M]. 北京:北京邮电大学出版社.2009.9.39-42.[11] [美]Sridhar, Poduri.Modern C++ and Windows Store Apps[M]. Sridhar&Poduri. 2013.151-210.[12] [美]Jeffrey Richter, Christophe Nasarre.Windows Via C/C++ 5th Edition[M]. Microsoft Press.20011.10.24-143..。