最新解析IP数据包剖析.docx
- 文档编号:28757748
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:14
- 大小:39.24KB
最新解析IP数据包剖析.docx
《最新解析IP数据包剖析.docx》由会员分享,可在线阅读,更多相关《最新解析IP数据包剖析.docx(14页珍藏版)》请在冰豆网上搜索。
最新解析IP数据包剖析
300-400元1632%
2、Google网站www。
people。
com。
cn
但这些困难并非能够否定我们创业项目的可行性。
盖茨是由一个普通退学学生变成了世界首富,李嘉诚是由一个穷人变成了华人富豪第一人,他们的成功表述一个简单的道理:
如果你有能力,你可以从身无分文变成超级富豪;如果你无能,你也可以从超级富豪变成穷光蛋。
2、传统文化对大学生饰品消费的影响
3、竞争对手分析
(三)大学生购买消费DIY手工艺品的特点分析
二、资料网址:
大学生的消费是多种多样,丰富多彩的。
除食品外,很大一部分开支都用于。
服饰,娱乐,小饰品等。
女生都比较偏爱小饰品之类的消费。
女生天性爱美,对小饰品爱不释手,因为饰品所展现的魅力,女人因饰品而妩媚动人,亮丽。
据美国商务部调查资料显示女人占据消费市场最大分额,随社会越发展,物质越丰富,女性的时尚美丽消费也越来越激烈。
因此也为饰品业创造了无限的商机。
据调查统计,有50%的同学曾经购买过DIY饰品,有90%的同学表示若在学校附近开设一家DIY手工艺制品,会去光顾。
我们认为:
我校区的女生就占了80%。
相信开饰品店也是个不错的创业方针。
上述所示的上海经济发展的数据说明:
人们收入水平的增加,生活水平的提高,给上海的饰品业带来前所未有的发展空间,为造就了一个消费额巨大的饰品时尚市场提供了经济基础。
使大学生对DIY手工艺品的时尚性消费,新潮性消费,体验性消费成为可能。
为此,装潢美观,亮丽,富有个性化的店面环境,能引起消费者的注意,从而刺激顾客的消费欲望。
这些问题在今后经营中我们将慎重考虑的。
解析IP数据包
任务目的:
设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而IP层的工作原理有更好的理解和认识。
任务要求:
本实验的目标是捕获网络中的IP数据包,解析数据包的内容,见个结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下:
•以命令行形式运行:
ipparselogfile,其中ipparse是程序名,而logfile则代表记录结果的日志文件。
•在标准输出、和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
•当程序接收到键盘输入Ctrl+C时退出。
设计相关知识:
互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解,图1给出了IP协议的数据包格式.
IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析.
报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B之间,是可变的.
04816192431
版本
报头标长
服务类型
总长度
标识
标志
片偏移
生存时间
协议
头校验和
源IP地址
目的IP地址
选项
填充域
数据部分
图1IP数据包的格式
服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.
B7b6b5b4b3b2b1b0
优先级
D
T
R
C
0
图2服务类型字段结构
优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义.
表一优先子域的说明
位数(b7b6b5)意义
111网络控制
110网络间控制
101重要(CRITIC/ECP)
100即时,优先
011即时
010立刻
001优先
000普通
在4位服务类型子域中b4,b3,b2,b1分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本).表2列出了服务器类型自域的构成.
位数(b4b3b2b1)
意义
1111安全级最高
1000延迟最小
0100吞吐量最大
0001金钱成本最小
0000普通服务
总长度字段为2B,它定义了以字节为单位的数据包的总长度.IP数据包的最大长度为65535B.
标识字段的长度为16位,用于识别IP数据包的编号.每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组.
报头中的标志字段如图7-3所示.标志字段共3位,最高位是0.禁止分片标志DF(donotfragment)字段的值若为1,表示不能对数据包分片;若DF值为0,则表明可以分片.分片标志MF(morefragment)的值为1,表示接收到的不是最后一个分片;若MF值为0,表示接收到的是最后一个分片.
片偏移字段共13位,说明分片在整个数据包中的相对位置.片偏移值是以8B为单位来记数的,因此选择的分片长度应该是8B的整数倍.
生存时间(TTL)字段为8位,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的.
协议字段为8位,表示使用此IP数据包的高层协议类型,常用的协议号如表二所示.
序号
协议名称
序号
协议名称
1
2
4
6
8
ICMP
IGMP
IPinIP
TCP
EGP
17
41
46
89
UDP
IPV6
RSVP
OSPFA
表二典型的协议号
头校验和字段为16位,用于存放检查报头错误的校验码。
检验的范围是整个IP包的报头。
校验和按如下方法计算:
1)将头校验和的字段置为0。
2)将报头部分的所有数据以16位为单位进行累加,累加方式是求异或。
3)将累加的结果取反码,就是头校验和。
当收到一个IP包时,要检查报头是否出错,就把报头中的所有数据以16位为单位进行累加,若累加的结果为0,则报文没有出错。
地址字段包括源地址和目的地址。
源地址和目的地址的长度都是32位,分别表示发送数据包的源主机和目的主机的IP地址。
选项字段的长度范围为0~40B,主要用于控制和测试。
在使用选项字段的过程中,有可能出现报头部分的长度不是32位的整数倍的情况。
如果出现这种情况,就需要通过填充位来凑齐。
任务设计分析:
为了获取网络中的IP数据包,必须对网卡进行编程,在这里我们使用套接字(socket)进行编程。
但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式出发的数据包。
对于其他形式的数据包,如已到达网络接口但却不是发送到此地址的数据包,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。
我们要想获取流经网络设备的所有数据包,就需要将网卡设置为混杂模式。
本程序主要由三部分构成:
初始化原始套接字,反复监听捕获数据包和解析数据包。
下面就结合核心代码对程序的具体实现进行讲解,同时使程序流程更加清晰,去掉了错误检查等保护性代码。
程序流程图:
具体程序代码:
#include
#include
#include
#include
#include
//#include
#pragmacomment(lib,"ws2_32")//指定连接到网络应用和internet
#defineIO_RCVALL_WSAIOW(IOC_VENDOR,1)
typedefstructIP_HEAD
{
union//定义联合
{
unsignedcharVersion;
unsignedcharHeadLen;
};
unsignedcharServiceType;
unsignedshortTotalLen;
unsignedshortIdentifier;
union
{
unsignedshortFlags;
unsignedshortFragOffset;
};
unsignedcharTimeToLive;
unsignedcharProtocol;
unsignedshortHeadChecksum;
unsignedintSourceAddr;
unsignedintDestinAddr;
unsignedcharOptions;
}ip_head;//定义IP头部的数据结构
voidmain(intargc,char*argv[])
{
usingnamespacestd;
ofstreamoutfile("e:
\\logfile.txt",ios:
:
out);
if(argc!
=2)
{
cout< PackParsepacket_sum"< return; } WSADATAWSAData; if(WSAStartup(MAKEWORD(2,2),&WSAData)! =0) { cout< return; } SOCKETsock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);//三个参分别为通信发生的区字段,套接字的类型,与IP协议 if(sock==INVALID_SOCKET) { cout< "< closesocket(sock); WSACleanup(); } BOOLflag=TRUE; if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR) { cout< "< closesocket(sock); WSACleanup(); } charhostName[128];//获取主机名 if(gethostname(hostName,100)==SOCKET_ERROR) { cout< "< closesocket(sock); WSACleanup(); } hostent*pHostIP;//获取本地IP if((pHostIP=gethostbyname(hostName))==NULL) { cout< "< closesocket(sock); WSACleanup(); } sockaddr_inhost_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< "< closesocket(sock);//绑定网卡 WSACleanup(); } DWORDdwBufferLen[10]; DWORDdwBufferInLen=1; DWORDdwBytesReturned=0; if(WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ERROR) { cout< "< closesocket(sock);//将网卡设为混杂模式,以接受所有数据 WSACleanup(); } cout< "< charbuffer[65535];//设置缓冲区 intpacksum=atoi(argv[1]);//字符串转换为整形 for(inti=0;i { if(recv(sock,buffer,65535,0)>0)//四个参数分别是套接字描述符,缓冲区的地址,缓冲区大小,附加标志 { ip_headip=*(ip_head*)buffer; cout<<"-----------------------"< cout<<"版本: "<<(ip.Version>>4)< cout<<"头部长度: "<<((ip.HeadLen&0x0f)*4)< cout<<"服务类型: Priority"<<(ip.ServiceType>>5)<<",Service"<<((ip.ServiceType>>1)&0x0f)< cout<<"总长度: "< cout<<"标识符: "< cout<<"标志位: "<<((ip.Flags>>15)&0x01)<<",DF="<<((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)< cout<<"片偏移: "<<(ip.FragOffset&0x1fff)< cout<<"生存周期: "<<(int)ip.TimeToLive< cout<<"协议: Protocol"<<(int)ip.Protocol< cout<<"头部校验和: "< cout<<"原地址: "< cout<<"目的IP地址: "< outfile<<"-----------------------"< outfile<<"版本: "<<(ip.Version>>4)< outfile<<"头部长度: "<<((ip.HeadLen&0x0f)*4)< outfile<<"服务类型: Priority"<<(ip.ServiceType>>5)<<",Service"<<((ip.ServiceType>>1)&0x0f)< outfile<<"总长度: "< outfile<<"标识符: "< outfile<<"标志位: "<<((ip.Flags>>15)&0x01)<<",DF="<<((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)< outfile<<"片偏移: "<<(ip.FragOffset&0x1fff)< outfile<<"生存周期: "<<(int)ip.TimeToLive< outfile<<"协议: Protocol"<<(int)ip.Protocol< outfile<<"头部校验和: "< outfile<<"原地址: "< outfile<<"目的IP地址: "< } } closesocket(sock); WSACleanup(); } 程序运行结果: 程序编译运行后: 以命令行形式运行程序ipparse: 同时在程序所在的文件夹中生成了名为logfile的txt文件,里面记录了上面显示的内容。 小结: 通过这次实验,了解到关于计算机网络数据传送及处理过程中,软件起到了巨大的作用。 熟悉了C++语言在计算机网络方面的应用,是一次难得的机会。 通过解析IP数据包这个任务,基本掌握了用套接字编程来实现获取并解析IP数据包的方法,了解了IP数据报的各种位与协议的概念和意义。 计算机网络课程大作业 院(系): 计算机科学与技术学院 专业: 网络工程 姓名: 支航冲 班级: 1402班 学号: 1408020219 指导教师: 薛弘晔 2016年6月5日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 解析 IP 数据包 剖析