收藏 分销(赏)

计算机网络:实验2 IP数据包捕获程序设计.docx

上传人:二*** 文档编号:4601203 上传时间:2024-10-04 格式:DOCX 页数:5 大小:67KB 下载积分:5 金币
下载 相关 举报
计算机网络:实验2 IP数据包捕获程序设计.docx_第1页
第1页 / 共5页
本文档共5页,全文阅读请下载到手机保存,查看更方便
资源描述
实验二 IP数据包捕获程序设计 实验指导及实验报告 班级 姓名 学号 1. 实验目的 1)IP数据包是网络协议学习过程中容易接触到的,本实验让同学们将所学知识加以运用,并加强掌握 IP 数据报格式、理解 IP 协议的工作原理及工作过程、掌握捕获 IP 等数据报以及对捕获到的 IP 数据报进行分析的能力。 2)希望通过探索,在实践应用中提高自己的编程能力。 2. 实验环境 系统环境:Windows操作环境 编程语言: C++程序设计语言 必要软件:Visual C++ 3. 设计要求 1) 实现程序应为图形化界面,可以输入需要捕获的数据包数量,输出每个数据包的相关字段值(包括版本、总长度、标志位、片偏移、协议、源地址与目的地址)。 2) 要求遵循RFC791的相关IP协议规定,可以捕获通过本地网卡的IP数据包。点击Capture按钮,实现对指定数量的IP数据包的捕抓过程。 3) 要求有良好的编程规范与注释信息。 4) 要求有详细的说明文档,包括程序的设计思想、工作流程、关键问题等。 5) 要求在Windows操作系统环境中,使用Visual C++编程工具实现。 4. 实验步骤 1) 创建原始套接字 为了不活经过本地网卡的IP数据包,需要使用原始套接字来进行通信。首先,调用socket()函数创建原始套接字,SOCK_RAW表示原始套接字,IPPROTO_IP表示IP协议;然后,调用bind()函数将套接字与本地网卡绑定;最后,调用setsockopt()函数社设置接收超时,SOL_SOCKET表示在套接字层设置,SO_RCVTIMEO表示接收超时,RecvTime表示超时时间,它被设置为5000ms。 下面给出的是创建原始套接字的代码: // 建立于Winsock库的绑定 WSAStartup(MAKEWORD(2,2),&WSAData); // 创建原始套接字 socket(AF_INF,SOCK_RAW,IPPROTO_IP); sockaddr_in HostAddr; HostAddr.sin_family=AF_INF; HostAddr.sin_addr.s_addr=(*(in_addr)pHostent->h_addr).s_addr; // 套接字绑定本地网卡 bind(Socket,(PSOCKADDR)&HostAddr,sizeof(HostAddr)); // 设置接收超时时间 int RecvTime=5000; setsockopt(Socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&RecvTime,sizeof(RecvTime)); 2) 定义IP头部的数据结构 IP数据包由IP头部与IP数据构成,需要自行构造的是IP数据包的头部。在解析IP头部的各个字段之前,首先需要构造IP头部的数据结构,包括1字节的版本与头部长度、1字节的服务类型、2字节的总长度、2字节的标识符、2字节的标志位与片偏移、1字节的生存周期、1字节的协议、2字节的头部校验、4字节的源地址与4字节的目的地址。这里,不需要构造选项与填充字段。 下面给出的是构造IP头部结构的代码: //定义IP头部结构 typedef struct IP_HEAD { union { ugsigned char Version; ugsigned char HeadLen; }; ugsigned char ServiceType; ugsigned short TotalLen; ugsigned short Identifier; union { ugsigned short Flags; ugsigned short FragOffset; }; ugsigned char TimeToLive; ugsigned char Protocol; ugsigned short HeadChecksum; ugsigned int SourceAddr; ugsigned int DestinAddr; }ip_head; 3) 接受与解析IP数据包 默认情况下,网卡不会接收目的地址不是自己的IP数据包,也就是说应用程序无法接收无关的数据包。首先,调用ioctlsocket()函数将网卡设置为混杂模式,IO_RCVALL表示允许网卡接收所有数据包,dwValue为输入/输出参数,dwValue=1表示执行操作;然后,调用recv()函数接收通过网卡的IP包,由于IP包的最大长度为65535字节,因此接收缓冲区的大小不能小于65535字节;最后,将IP包头部复制到定义的IP头部结构中,并且依次将那些需要解析的字段值取出。 下面给出的是接收与解析IP数据包的代码: //设置网卡为混杂模式 #define IO_RCVALL _WSAIOW(IOC_VENDOR,1); DWORD dwValue=1; ioctlsocket(Socket,IOC_VENDOR,&dwValue); //接受数据包 recv(Socket,RecvBuf,sizeof(RecvBuf),0); //解析IP数据包 ip_head IpHead = *(ip_head*)RecvBuf; //一次解析IP头部的相应字段 4) IP抓包实现流程 第1步,客户机程序会初始化用户界面;第2步,客户机建立Winsock库绑定关系,并且创建原始套接字;第3步,客户机设置接收超时时间;第4步,客户机将原始套接字与网卡绑定;第5步,客户即将网卡设置为混杂模式;第6步,客户机接收通过网卡的IP数据包,并且解析IP头部的相应字段;第7步,客户机输出所有IP包的相关字段信息;第8步,客户机释放原始套接字,并且解除Winsock库绑定关系。 具体流程图看下图2-1 图2-1实现流程 5. 程序源代码(附在该实验指导书后面) 6. 程序运行过程和运行结果截图(附在该实验指导书后面) 7. 实验心得与体会
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服