ip数据包分析Word格式文档下载.docx
- 文档编号:21721815
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:12
- 大小:81.55KB
ip数据包分析Word格式文档下载.docx
《ip数据包分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ip数据包分析Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
本系统是针对于计算机通信流量分析的,通过对IP数据包的版本﹑头部长度服务类型﹑总长度﹑标示符﹑标志位﹑片位移﹑生存周期﹑协议﹑头部校验和﹑源地址﹑目的IP地址。
对所输入的IP数据包进行对应的分析可以得到一系列的对应的属性值。
管理员通过对这些IP数据包属性值进行对应的解析可以得到该网络的通信具体情况。
5.系统设计
5.1系统目标
利用C/C++语言,根据所学知识,设计程序,功能为捕获网络中的IP数据包,接续数据包的内容,将结果显示在比准输出上,并同时写入日志文件。
具体:
1.以命令行形式运行,ipparselogfile,其中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"
protoinfo.h"
#include<
iostream.h>
stdio.h>
conio.h>
ctype.h>
mstcpip.h"
//#pragmacomment(lib,"
Advapi32.lib"
)
CInitSocktheSock;
voidIPHQZ(char*);
intnc=0;
voidmain()
{
SOCKETsAYU=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
//创建原始套接字sHQZ.
charszHostName[56];
SOCKADDR_INaddr_in;
gethostname(szHostName,56);
//获取主机名。
structhostent*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网络数据包分析工具---------------------"
endl<
endl;
您的IP地址为:
:
inet_ntoa(addr_in.sin_addr)<
if(bind(sAYU,(PSOCKADDR)&
addr_in,sizeof(addr_in))==-1)
DWORDdwValue=1;
if(ioctlsocket(sAYU,SIO_RCVALL,&
dwValue)!
=0)
charbuff[1024];
intnRet;
while(TRUE)
{
nRet=recv(sAYU,buff,1024,0);
if(nRet>
0)
{
IPHQZ(buff);
}
}
closesocket(sAYU);
}
voidIPHQZ(char*pData)
-----------------------IP网络数据包分析------------------------"
unsignedcharbuff[1024];
strcpy((char*)buff,pData);
IPHeader*pIPHeader=(IPHeader*)pData;
//创建IP报头对象
in_addrsource,dest;
charszSourceIp[32],szDestIp[32];
source.S_un.S_addr=pIPHeader->
//从IP头中取出源
//从IP头中取出目的IP地址
strcpy(szSourceIp,:
inet_ntoa(source));
strcpy(szDestIp,:
inet_ntoa(dest));
IP包源地址"
szSourceIp<
IP包目的地址"
szDestIp<
intiphver=((pIPHeader->
iphVerLen>
>
4)&
0xf)*sizeof(UCHAR);
//IP包版本号
IP包版本为:
IPv"
iphver<
intnHeaderLen=(pIPHeader->
iphVerLen&
0xf)*sizeof(ULONG);
//IP报头长度
IP包报头长度为"
nHeaderLen<
开销为:
((pIPHeader->
ipTOS>
1)&
0x1)<
可靠性为:
2)&
0x1)<
吞吐量为:
3)&
延迟为:
优先级为:
5)&
6)&
0xf)*sizeof(UCHAR)<
7)&
intcountlen=(pIPHeader->
ipLength);
IP包总长度为:
"
countlen<
B"
标识为:
pIPHeader->
ipID<
标志位为:
ipFlags<
生存时间为:
int(pIPHeader->
ipTTL)<
switch(pIPHeader->
ipProtocol)
caseIPPROTO_TCP:
//TCP协议
cout<
IP包使用的协议为:
TCP"
break;
caseIPPROTO_UDP:
UDP"
caseIPPROTO_ICMP:
ICMP"
caseIPPROTO_IGMP:
IGMP"
校验和:
ipChecksum<
部分数据为:
for(inti=1;
i<
100;
i++)
printf("
%02x"
buff[nHeaderLen+i]);
5.6程序运行截图
5.6.1TCP的数据包
5.6.2UDP的数据包
6.实验心得
通过这一个星期的课程设计,我基本掌握了用套接字编程来实现获取并解析IP数据包的方法。
当然,过程要比想象艰辛得多。
首先是一个设计思想的问题。
众所周知,IP数据报的格式说明了IP协议都具有什么功能。
但是由于在数据报环节知识的薄弱,我特地去图书馆查阅了相关资料,才大致了解了IP数据报的各种位与协议的概念和意义。
进而在脑中才形成了解决问题的理念——网卡可以接收流经其的各种数据报,所以毫无疑问的应当围绕它进行编程实现。
但是这也正是我最迷惑的地方——因为完全不知道如何使用套接字socket()函数——毕竟是以前从未接触过的领域。
后来通过在一些网络编程教材上的了解和与做同类题目同学的讨论,我编程的思路才逐渐清晰起来。
这次课程设计教会我的不仅仅只是如何实践运用与其相关的知识,更重要的是让我懂得个人的实践比单纯的讨论重要,要单纯的讨论比单纯的空想有效。
同时,本次课设也大大提高了我编程的自信,让我感受到了成功的喜悦。
7.参考书籍
《计算机网络(第四版)》
主编:
谢希仁出版社:
电子工业出版社出版时间:
2004年7月
《计算机网络课程设计》主编:
吴功宜胡晓英张仁何云王宁出版社:
机械工业出版社
出版或修订时间:
2005年9月
《计算机网络设计》主编:
易建勋出版社:
人民邮电出版社出版或修订时间:
2007年10月
《计算机网络》主编:
吴功宜出版社:
清华大学出版社
东华理工大学长江学院
课程设计评分表
学生姓名:
万海涛
班级:
信管一班
学号:
07322121
课程设计题目:
IP数据包分析
项目内容
满分
实评
选
题
能结合所学课程知识、有一定的能力训练。
符合选题要求
(5人一题)
10
工作量适中,难易度合理
能
力
水
平
能熟练应用所学知识,有一定查阅文献及运用文献资料能力
理论依据充分,数据准确,公式推导正确
能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等
能体现创造性思维,或有独特见解
成
果
质
量
总体设计正确、合理,各项技术指标符合要求。
说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;
分析处理科学、条理分明、语言流畅、结构严谨、版面清晰
设计说明书栏目齐全、合理,符号统一、编号齐全。
格式、绘图、表格、插图等规范准确,符合国家标准
有一定篇幅,字符数不少于5000
总
分
100
指导教师评语:
指导教师签名:
年
月
日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ip 数据包 分析