电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

西工大计算机网络实验四

13页
  • 卖家[上传人]:lizhe****0001
  • 文档编号:45881525
  • 上传时间:2018-06-19
  • 文档格式:DOCX
  • 文档大小:109.59KB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、实 验 报 告实验四、解析实验四、解析 IP 分组分组一、实验目的一、实验目的1、IP 分组是网络层传输的基本单元,通过接受和解析 IP 分组,了解 IP分组基本结构,与 IP 协议基本功能;2、输出 TCP 报文数据,以 16 进制输出,建立 TCP 连接,分析 TCP 的三次握手。二、实验过程二、实验过程(1)实验流程(2)实验原理:想要抓取网络中的 IP 数据包,必须对网卡进行编程,我们使用套接字(socket)进行编程。但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式出发的数据包。对于其他形式的数据包,如已到达网络接口但却不是发送到此地址的数据包,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。我们要想获取流经网络设备的所有数据包,就需要将网卡设置为混杂模式。本程序主要由三部分构成:初始化原始套接字,反复监听捕获数据包和解析数据包。1)使用原始套接字套接字分为三种,即流套接字(Stream Socket) 、数据报套接字(Datagram Socket)和原始套接字(Raw Socket)

      2、 。要进行 IP 数据包的接受与发送,应使用原始套接字。在 WSASoccet 函数中,第一个参数指定通信发生的区字段,AF_INET 是针对Internet 的,允许在远程主机之间通信。第二个参数是套接字的类型,AF_INET 地址族下,有 SOCK_STREAM、SOCK_DGRAM、SOCK_RAW 三种套接字类型。在这里,我们设置为 SOCK_RAW,表示我们声明的是一个原始套接字类型。第三个参数依赖于第二个参数,用于指定套接字所用的特定协议,这里使用 IP 协议。第四个参数为 WSAPROTOCOL_INFO 位,该位可以置空,永远置 0。第六个参数是标志位,WSA_FLAG_OVERRLAPPED 表明可以使用发送接收超时设置,本课程设计也可以把这个标志位设置为 NULL,因为本设计不用考虑超时情况。创建原始套接字后,IP 头就会包含在接收的数据中。然后,我们可以设置IP 头操作选项,调用 sotscockpot 函数。其中 flag 设置为 TRUE,并设定IP_HDRINCL 选项,表明用户可以亲自对 IP 头进行处理。之后,完成对 socket的初始化工作。填写 so

      3、ckaddr_in 的内容时,其地址值应填写为本机 IP 地址可以通过gethostbyname()函数获取;端口号可以随便填写,但不能与系统冲突;协议族应填写为 AF_INET。注意,sockaddr_in 结构的值必须是以网络字节顺序表示的值,而不能直接使用本机字节顺序的值,使用 htoms()函数可以将无符号短整型的主机数据转换为网络字节的顺序的数据。最后使用 bind()函数将socket 绑定到本地网卡上。绑定网卡后,需要 WSAIoctl()函数把网卡设置为混杂模式,使网卡能够接收所有网络数据,如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收到的数据就拷贝到套接字中。因此,网卡就可以接收所有经过的 IP 包。2)接收数据包在程序中可使用 RECV()函数接收经过的 IP 包。该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收到缓冲区的地址;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如果对所发送的数据没特殊要求,直接设为 0。因为 IP 数据包的最大长度是 65536B,因此缓冲区

      4、的大小不能小于65535B。设置缓冲区后,可利用循环来反复监听接收 IP 包,用 recv()函数接收。然后定义 IP 头部的数据结构。程序需要定义一个数据结构表示 IP 头部这时我们只考虑 IP 头部结构,不考虑数据部分。在捕获 IP 数据包后,可以通过指针把缓冲区的内容强制转化为 IP_HEADER 数据结构。3)解析 IP 数据包解析 IP 数据包的字段有两种策略。针对长度为 8 位、16 位和 32 位的字段 (或子字段)时,可以利用 IP_HEADER 的成员指教获取。要解析长度不是 9 位倍数的字段(或子字段)时,可以利用 C 语言中的位移以及与、或操作完成。下面给出了通过 IP_HEADER 解析 IP 头各个字段的代码。(3)IP 源代码 #include “winsock2.h“ #include “ws2tcpip.h“ #include “iostream“ #include “stdio.h“ #pragma comment(lib,“ws2_32.lib“)using namespace std;static const int NumOfData = 8;t

      5、ypedef struct _IP_HEADER unionBYTE Version;/版本版本BYTE HdrLen;/IHL;BYTE ServiceType;/服务类型服务类型WORD TotalLen;/总长总长WORD ID;/标识标识unionWORD Flags;/标志标志WORD FragOff;/分段偏移分段偏移;BYTE TimeToLive;/生命期生命期BYTE Protocol;/协议协议WORD HdrChksum;/头校验和头校验和DWORD SrcAddr;/源地址源地址DWORD DstAddr;/目的地址目的地址BYTE Options;/选项选项DWORD DataNumOfData; IP_HEADER;/逐位解析逐位解析 IP 头中的信息头中的信息 void getVersion(BYTE b,BYTE void getIHL(BYTE b,BYTE char *parseServiceType_getProcedence(BYTE b) switch(b5)case 7:return “Network Control“;break;case

      6、6:return “Internet work Control“;break;case 5:return “CRITIC/ECP“;break;case 4:return “Flash Override“;break;case 3:return “Flash“;break;case 2:return “Immediate“;break;case 1:return “Priority“;break;case 0:return “Routine“;break;default:return “Unknown“; char *parseServiceType_getTOS(BYTE b) b=(b1)switch(b)case 0:return “Normal service“;break;case 1:return “Minimize monetary cost“;break;case 2:return “Maximize reliability“;break;case 4:return “Maximize throughput“;break;case 8:return “Minimize

      7、delay“;break;case 15:return “Maximize security“;break;default:return “Unknown“; void getFlags(WORD w,BYTE MF=(w13) void getFragOff(WORD w,WORD char *getProtocol(BYTE Protocol) switch(Protocol)case 1:return “ICMP“;case 2:return “IGMP“;case 4:return “IP in IP“;case 6:return “TCP“;case 8:return “BGP“;case 17:return “UDP“;case 41:return “RSVP“;case 89:return “OSPF“;default:return “UNKNOWN“; void ipparse(FILE *file,char *buffer) int k,j;IP_HEADER ip=*(IP_HEADER *)buffer;fseek(file,0,SEEK_END); for(k=

      8、0;k4,(buffer20*k+j fprintf(file,“n“); /解析版本信息解析版本信息BYTE version;getVersion(ip.Version,version);fprintf(file,“版本版本=%drn“,version);/解析解析 IP 长度长度BYTE headerLen;getIHL(ip.HdrLen,headerLen);fprintf(file,“头长度头长度=%d(BYTE)rn“,headerLen);/解析服务类型解析服务类型fprintf(file,“服务类型服务类型 =%s,%srn“,parseServiceType_getProcedence(ip.ServiceType),parseServiceType_getTOS(ip.ServiceType);/解析数据包长度解析数据包长度fprintf(file,“数据报长度数据报长度=%d(BYTE)rn“,ip.TotalLen);/解析数据包解析数据包 IDfprintf(file,“数据报数据报 ID=%drn“,ip.ID);/解析标志位解析标志位BYTE DF,MF;

      9、getFlags(ip.Flags,DF,MF);fprintf(file,“分段标志分段标志 DF=%d,MF=%drn“,DF,MF);/解析分段偏移解析分段偏移WORD fragOff;getFragOff(ip.FragOff,fragOff);fprintf(file,“分段偏移值分段偏移值=%drn“,fragOff);/解析生存期解析生存期fprintf(file,“生存期生存期=%drn“,ip.TimeToLive);/解析协议解析协议fprintf(file,“协议协议=%srn“,getProtocol(ip.Protocol);/解析头校验和解析头校验和fprintf(file,“头校验和头校验和=0x%0xrn“,ip.HdrChksum);/解析解析 IP 地址地址fprintf(file,“源源 IP 地址地址=%srn“,inet_ntoa(*(in_addr *)/解析目的解析目的 IP 地址地址fprintf(file,“目的目的 IP 地址地址=%srn“,inet_ntoa(*(in_addr *)/解析数据包前解析数据包前 32 字节字节for (int i = 0; i h_addr_list0;addr_in.sin_family=AF_INET;addr_in.sin_port=htons(6000); /把原始把原始 socket 绑定到本地网卡上绑定到本地网卡上if(bind(sock,(PSOCKADDR)return -1;DWORD dwValue=1;/设置设置 SOCK_RAW 为为 SIO_RCVALL,以便接收所有的以便接收所有的 IP 包包 #define IO_RCVALL _WSAIOW(IOC_VENDOR,1)DWORD dwBufferLen10;DWORD dwBufferI

      《西工大计算机网络实验四》由会员lizhe****0001分享,可在线阅读,更多相关《西工大计算机网络实验四》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.