版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编写C+程序输出IP数据包并检验IP数据包正确性郭照凯 南开大学 通信工程专业摘要:本文主要通过编写C+程序来输出网络数据包中的MAC帧以及IP首部的各个字段信息。数据包本来是用input文件,但其验证有问题,所以就通过由Wireshark捕获新的数据包。编写程序运行后,程序输出的各个字段与Wireshark的分析对比,验证程序的正确性关键词:C+;Wireshark;MAC帧;IP首部Abstract: This paper mainly by writing C + + program to output network packets in the MAC frames and IP h
2、eader information in various fields. Packet is input files have been, but the verification problem, so Wireshark capture by the new data packet. Write a program running, the program output analysis of the various fields in comparison with Wireshark to verify the correctness of the program.Keywords:
3、C + +; Wireshark; MAC frame; IP header0 引言协议是两个实体之间用于交换数据的一组规则。协议通常是按照各个功能划分的,而各个功能又对应不同的层次,上层对应用户层,下层是服务提供层,国际标准化组织(International Standards Organization ,ISO)的SC16委员会在1978年3月提出开放式互联系统(Open Systems Interconnection ,OSI)参考模型作为第一个计算机网络的体系的国际标准,目前在互联网上最为广泛应用的TCP/IP模型也是国际标准之一。TCP/IP协议是Internet最基本的协议、Int
4、ernet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。了解并且掌握协议的结构,以及各个字段的含义,有助于更好的理解各个协议的原理。本文则通过编写C+程序来对IP数据包进行解析,并与wireshark捕获的内容进行对比验证其正确性。1 wireshark导出数据文件老师给的input文件打开之后如下图所示,可以看得出,这是一个十六进制文件。前七个字节的AA是前导码,AB是帧前定界符,FFFFFFFFFFFF是目的MAC地址,00 27 E3 B4 FC DE是源MAC地址,之后的00 83不是标志着帧的类型,那么应该标志着帧的长度。数一下,到6E刚好是83(10进制是131)
5、,还剩4个字节,刚好是帧校验序列长(FCS)。之后又是7个字节AA,又开始一个新帧。从最右边的该16进制的文本表示中也可看出。因此input里没有IP数据报。图片1所以,我们用wireshark重新捕获数据包并导出。Wireshark是目前世界上最受欢迎的一款免费开放的协议分析软件,可以用它来捕获网络上数据包并且将其翻译为人们容易读懂的文字和图标形式,极大地方便了对网络活动的检测分析和教学实验。我们通过登录我校BT网站得到data数据文件为例,步骤如下:1) 打开Wireshark,选择capture-interface-start开始捕包。图片22) 登录 我们可以马上得到如下的数据包:图片
6、3值得提到的是本来是出现很多的数据包的,其中有很多都不是我们所需要的,之所以由以上的结果是因为我们在Filter(过滤)里面打上了ip.addr=14。14是bt的IP号,是在命令行界面打ping 得到的。图片4而如果在命令行打入ping ,经验证得不到百度的IP号,这也是我们选择学校的内网网址的原因。图片53) 选择数据包进行导出。选中我们要导出的数据包,依次点选菜单目录下的file-export-file.出现如下界面:图片6在左下角点选Selected packet,保存类型选择C Arrays,以文件名data保存到D盘。4) 打开D盘的
7、data文件,删去头尾不符合C+引用文件的内容,并将“,”全部替换为“ ”,并保存文件。data文件截图如下:图片72 IP数据报包首部校验和原理说明虽然说IP协议提供的是不可靠无连接的传输方式,但是在IP首部中还有一个字段首部校验和,用来检测IP数据报首部的正确性,对IP数据报首部进行校验。校验和或称检验和,通常用于对数据块的校验,它把数据块的每两个字节按二进制加法进行循环求和1韩毅刚.计算机网络技术M.北京:机械工业出版社,20102刘璟.高级语言C+程序设计(第二版)M.北京:高等教育出版社1。基本原理如下图:图片 83 编写程序并验证IP数据包的正确性编写C+程序如下:#include
8、 #include#include#includeusing namespace std;struct eth_header unsigned char eth_dst6; unsigned char eth_src6; unsigned short upper_pro; ; /mac头共14字节struct ip_headerunion unsigned char version; / 4bitsunsigned char ihl; /4bits; unsigned char tos; /1字节unsigned short total_len; /2字节unsigned short iden
9、tifer; /2字节unionunsigned short flags; /3bitsunsigned short offset; /13bits;unsigned char TTL; /1字节unsigned char protocol; /1字节unsigned short checksum; / 2字节unsigned char ip_src4; /4字节unsigned char ip_dst4; /4字节unsigned int option; / option加填充共为32bits 在此处把这四个字节看成一个字段;void main() /程序主函数,实现所有功能int temp
10、38; ifstream infile(D:data); /打开文件 for(int i=0;ihextempi;infile.close();struct eth_header eth; /定义帧头结构变量 struct ip_header ip; /定义Ip头部结构变量/以下给mac帧头变量赋值for(int i=0;i6;i+)eth.eth_dsti=(unsigned char)tempi;for(int i=6;i12;i+)eth.eth_srci-6=(unsigned char)tempi; eth.upper_pro=(temp128)|temp13;/以下给ip头部变量赋
11、值 ip.version=(unsigned char) temp14;ip.tos=(unsigned char)temp15;ip.total_len=(temp168)|temp17;ip.identifer=(temp188)|temp19;ip.flags=(unsigned short) (temp208)|(temp21);ip.TTL=(unsigned char)temp22;tocol=(unsigned char)temp23;ip.checksum=(temp248)|temp25;for(int i=26;i30;i+)ip.ip_srci-26=(uns
12、igned char)tempi;for(int i=30;i34;i+)ip.ip_dsti-30=(unsigned char)tempi;/以下输出mac头部信息cout输出mac帧头部信息(十六进制):endl;cout目的mac地址为:;for(int i=0;i5;i+)coutsetfill(0)setw(2)hex(int)eth.eth_dsti-;coutsetfill(0)setw(2)hex(int)eth.eth_dst5endl;cout源mac地址为:;for(int i=0;i5;i+)coutsetfill(0)setw(2)hex(int)eth.eth_s
13、rci-;coutsetfill(0)setw(2)hex(int)eth.eth_src5endl;cout上层协议类型为:;coutsetfill(0)setw(4)hexeth.upper_proendl;cout-endl; /以下输出ip头部信息 cout输出ip头部信息(十进制):endl;cout版本:dec4)endl;ip.ihl=ip.version&0x0f;coutip头部长度(ihl):(ip.ihl*4)endl;cout服务类型:(int)ip.tos (优先权子字段:5) tos子字段:1)&0x0f)endl;cout总长度:(int)ip.total_len
14、endl;cout标识符:(int)ip.identiferendl;cout片偏移:(ip.offset&0x1fff)endl;cout生存期:(int)ip.TTLendl;cout协议:(int)tocolendl;cout首部检校和:(int)ip.checksumendl;cout源ip地址:;for(int i=0;i3;i+)cout(int)ip.ip_srci.;cout(int)ip.ip_src3endl;cout目的ip地址:;for(int i=0;i3;i+) cout(int)ip.ip_dsti.;cout(int)ip.ip_src3endl;/
15、以下验证有没有选项字段if(ip.ihl=5) cout没有选项字段endl; for(int i=34;i38;i+) tempi=0; else ip.option=(unsigned int)(temp3424)|(temp3516)|(temp368)|temp37; cout选项:(int)ip.optionendl; /如果有选项字段 将选项和填充一起输出cout-endl; /以下验证ip数据包头部的正确性 unsigned short m1,m2,sum;unsigned int sum1=0;for(int i=14;i37;i=i+2)m1=(unsigned short)(tempi16)+(sum1&0xffff); /oxffff截掉进位那一位 sum1=(sum116)+(sum1&0xffff);sum1=(unsigned short)sum1;if(sum1=0)coutip数据包是正确的endl;elsecoutip数据包是错误的endl;cout-endl;cin.get(); 运行程序的结果如下图:图片9将其与我们用wireshark捕获的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泥瓦作文物修复师复试考核试卷含答案
- 矿山安全应急预案大全
- 静电成像感光元件(光导鼓)制造工岗位职业健康技术规程
- 聚氯乙烯装置操作工岗前合规考核试卷含答案
- 储能系统功率控制
- 造价师安装计量真题及答案解析
- 网格员真题附答案
- 殡仪馆招聘面试安全管理
- 文化旅游讲解员初级面试问题分类
- 经济财会招聘解析
- 哈尔滨工业大学博士研究生政治七讲当代资本主义的新变化课件
- 辽宁省辽南协作体2024-2025学年高一年级上册期中考试数学试卷(含解析)
- 设备试运行报告-范文
- 小学四年级数学上册期中考试卷(完整)
- 工厂内安全标识培训
- 拆除工程施工方案
- 20XX年中小学备战期中考试动员主题班会
- 2024年国考申论真题(行政执法卷)及参考答案
- TCI 338-2024 椰壳活性炭规范
- 2024年共青团入团积极分子考试测试题库及答案
- 2024年鲁科版英语五年级上册Unit 4单元测试题附答案
评论
0/150
提交评论