解析IP数据包课程设计报告

合集下载

数据通信与网络课程设计实践报告--解析IP数据包

数据通信与网络课程设计实践报告--解析IP数据包

数据通信与网络课程设计实践报告--解析IP数据包HUBEI NORMAL UNIVERSITY 专业课程论文Course’s Thesis课程名称数据通信与网络作业题目数据通信与网络课程设计报告学生姓名贺兵学号2008115020307指导教师彭旭富所在院系计算机科学与技术学院专业名称通信工程完成时间2012-01-10数据通信与网络课程设计报告摘要:互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP 数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道。

本程序使用套接字socket编程,将网受流经网卡的所有类型的数据包。

首先,初始化套接字,然后监听数据包,解析数据包。

关键字:TCP/IP协议,数据包,套接字,解析一设计内容及任务利用C/C++/VC/VB/JAVA语言,根据所学知识,设计程序,功能为捕获网络中的IP数据包,接续数据包的内容,将结果显示在标准输出上,并同时写入日志文件。

具体:1.以命令行形式运行,ipparse logfile,其中ipparse是程序命,而logfile则代表记录记过的日志文件。

2.在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

3.当程序接收到键盘输入Ctrl+C时推出。

二设计思想IP数据报的格式说明IP协议都具有什么功能。

其首部,版本目前广泛使用的版本号为4;首部长度站4bit;服务类型占8bit,其中服务类型TOS子域占4位,优先级子域占3位,另一位为保留位;总长度字段为2B,IP数据包的最大长度是65535B;标识占16bit,它是一个计数器,用来产生数据报的标识;标志占3bit,其中最低为为MF,MF=1时为后面“还有分片”,MF=0表示这是数据报片中的最后一个,DF=0时,表示允许分片;片偏移以8个字节为偏移单位;生存时间字段记为TTL,单位为秒;协议段占8bit,用于指出次数据是使用何种协议,典型的协议号有6:TCP,17:UDP,1:ICMP。

计算机网络课程设计报告-IP数据包的捕获与分析

计算机网络课程设计报告-IP数据包的捕获与分析

CENTRAL SOUTH UNIVERSITY计算机网络课程设计报告题目IP数据包的捕获与分析学生姓名廖成班级学号0902130408指导教师穆帅设计时间2015年11月目录第一章绪论 (3)1.1 课题研究背景 (3)1.2 课题研究的意义 (3)第二章课程设计的目的与要求 (3)2.1 课程设计的目的 (3)2.2 课程设计的要求 (4)第三章课程设计的内容 (4)3.1 课程设计的内容 (5)3.2 内容的要求 (5)第四章程序设计与分析 (5)4.1 IP数据包 (5)4.1.1 数据包的格式说明 (5)4.1.2 头部数据结构的定义 (7)4.2 部分程序实现 (7)4.2.1 套接字的使用 (7)4.2.2 数据库的使用 (8)4.2.3 各部分详细实现 (9)4.4 程序流程图 (12)4.4.1 主程序流程图 (12)4.4.2 捕获并分析数据包头部模块流程图 (13)4.4.3 头部信息存数据库模块 (13)第五章实验结果 (14)5.1 程序截图 (14)第六章总结 (16)6.1 实验心得 (16)第七章附录 (17)参考文献 (17)第一章绪论1.1 课题研究背景随着计算机技术的发展,网络的应用迅速普及,网络已日益成为生活中不可或缺的工具。

同时,网络的安全性与可靠性日益受到人们的重视,安全性指的是网络上的信息不被泄露、更改和破坏,可靠性指的是网络系统能够连续、可靠地运行,网络服务不被中断。

网络数据包捕获、监听与分析技术是网络安全维护的一个基础技术同时也是网络入侵的核心手段。

所以研究有关数据包捕获和分析技术对保证网络的健康、安全运行是很有意义的。

1.2课题研究的意义计算机之间进行通信时,交互的所有信息都封装在数据包中。

因此,通过采集网络数据并对其进行相应的分析,可以清楚地了解到进行通信的计算机的通信目的。

通过分析采集到的数据包可以确定网络是否受到入侵;其次也可以通过采集到的数据包来分析应用程序可能出现的问题及原因;此外,通过网络数据的采集和统计可以清楚地了解整个网络在各个时段内的网络负载情况,从而判断网络使用得是否合理。

计算机网络课程设计IP数据包解析文档

计算机网络课程设计IP数据包解析文档

解析IP数据包课程设计目的:•设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。

课程设计要求:课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。

本设计的目标是捕获网络中的IP 数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。

程序的具体要求如下:•以命令行形式运行:ipparse logfile,其中ipparse是程序名,而logfile则代表记录结果的日志文件。

•在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

•当程序接收到键盘输入Ctrl+C时退出。

设计相关知识:IP数据报的格式说明IP协议都具有什么功能。

其首部,版本目前广泛使用的版本号为4;首部长度站4bit;服务类型占8bit,其中服务类型TOS子域占4位,优先级子域占3位,另一位为保留位;总长度字段为2B,IP数据包的最大长度是65535B;标识占16bit,它是一个计数器,用来产生数据报的标识;标志占3bit,其中最低为为MF,MF=1时为后面“还有分片”,MF=0表示这是数据报片中的最后一个,DF=0时,表示允许分片;片偏移以8个字节为偏移单位;生存时间字段记为TTL,单位为秒;协议段占8bit,用于指出次数据是使用何种协议,典型的协议号有6:TCP,17:UDP,1:ICMP。

本程序使用套接字socket编程,将网卡设为能够接受流经网卡的所有类型的数据包。

首先,初始化套接字,然后监听数据包,解析数据包。

SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用来创建套接字,其参数为通信发生的区字段和套接字的类型。

ip数据包解析实验报告摘要doc

ip数据包解析实验报告摘要doc

ip数据包解析实验报告摘要篇一:解析IP数据包实验报告成都工业学院(课程设计实验报告)院系: 计算机工程系课程名称: 计算机网络设计名称: 解析IP数据包专业名称: 网络工程班级: 1305022姓名: 牟黎明学号: 11指导老师:刘枝盛老师成绩:设计时间:XX年12月22日—XX年12月26日成都工业学院课程设计任务书指导教师(签名):目录一、课程设计的目的和意义...............................................3 二、课程设计的内容和要求..............................................3 三、解析IP数据包设计的相关技术 (4)? 3.1 IP数据包的格式与分析? 3.2 程序分析设计......................................................4 .. (6) (6) (6) (7) (7)……………………….…………..…………….7 ?3.2.1 网卡设置? 3.2.2 程序设计? 3.2.3 程序设计? 3.2.4 程序设计? 3.2.5 程序设计四、课程设计过程 (8)? 4.1 程序流程图? 4.2源程序代码 (8) (16)……………….……………..............……………….9 ?4.3 程序运行结果? 4.3.1.登陆界面,提示输入命令符 (16)? 4.3.2.命令符输入错误后提示界面 (16)? 4.3.3.截获的IP数据包界面 (17)? 4.3.4.继续抓包图 (17)五、课程设计小结 (18)参考文献 (18)一、课程设计的目的和意义目的:本章课程设计的目的就是设计一个解析IP数据包的程序(我的编辑环境为visual2102),并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对网络层的工作原理有更好的理解和认识。

ip课程设计实验报告

ip课程设计实验报告

ip课程设计实验报告一、教学目标本章节的教学目标包括以下三个方面:1.知识目标:通过本章节的学习,学生需要掌握IP地址的基本概念、分类和作用,了解子网划分和IP地址分配的原理和方法。

2.技能目标:学生能够运用所学的知识,进行IP地址的配置和管理,掌握子网划分和IP地址分配的实践操作。

3.情感态度价值观目标:通过本章节的学习,学生能够培养对网络技术的兴趣和好奇心,增强信息时代下的责任感,认识到网络技术在现代社会中的重要性和应用价值。

在制定教学目标时,充分考虑了课程性质、学生特点和教学要求,将目标分解为具体的学习成果,以便后续的教学设计和评估。

二、教学内容本章节的教学内容主要包括以下几个方面:1.IP地址的基本概念:IP地址的定义、IP地址的格式和分类。

2.子网划分:子网划分的原理和方法,子网掩码的概念和计算。

3.IP地址分配:IP地址分配的原则和方法,私有IP地址和公有IP地址的区分。

4.IP地址的配置和管理:Windows系统下IP地址的配置方法,Linux系统下IP地址的配置方法。

5.实践操作:学生动手进行子网划分和IP地址分配的实践操作。

教学内容的选择和确保了科学性和系统性,详细的教学大纲明确了教学内容的安排和进度,教材的章节和内容列举清晰。

三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用以下几种教学方法:1.讲授法:通过讲解IP地址的基本概念、子网划分和IP地址分配的原理和方法,使学生掌握理论知识。

2.讨论法:学生进行小组讨论,分享子网划分和IP地址分配的实践经验,促进学生之间的交流和合作。

3.案例分析法:分析实际案例,让学生了解子网划分和IP地址分配在实际应用中的重要性。

4.实验法:安排实践操作环节,让学生亲自动手进行子网划分和IP地址分配,巩固所学知识。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,将选择和准备以下教学资源:1.教材:选用权威、实用的IP地址教材,为学生提供理论知识的学习依据。

ip数据课程设计

ip数据课程设计

ip数据课程设计一、教学目标本节课的教学目标是让学生了解IP地址的基本概念、作用和分类,掌握IP地址的表示方法和计算方式,了解IP地址的分配和管理机制,培养学生运用IP地址解决实际问题的能力。

1.了解IP地址的基本概念和作用。

2.掌握IP地址的分类及其特点。

3.掌握IP地址的表示方法及其计算方式。

4.了解IP地址的分配和管理机制。

5.能够运用IP地址解决实际问题。

6.能够使用网络工具查询IP地址相关信息。

情感态度价值观目标:1.培养学生对网络技术的兴趣和好奇心。

2.培养学生遵守网络规则的意识。

二、教学内容本节课的教学内容主要包括以下几个部分:1.IP地址的基本概念和作用。

2.IP地址的分类及其特点。

3.IP地址的表示方法及其计算方式。

4.IP地址的分配和管理机制。

5.IP地址在实际应用中的案例分析。

三、教学方法为了达到本节课的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解IP地址的基本概念、分类、表示方法和计算方式等知识,使学生掌握IP地址的相关知识。

2.案例分析法:通过分析实际应用中的IP地址案例,使学生了解IP地址在实际中的应用。

3.讨论法:学生进行小组讨论,培养学生运用IP地址解决实际问题的能力。

4.实验法:安排学生进行网络实验,让学生亲自动手操作,加深对IP地址的理解。

四、教学资源为了支持本节课的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的网络技术教材,为学生提供系统的理论知识。

2.参考书:提供相关的网络技术参考书籍,丰富学生的知识视野。

3.多媒体资料:制作精美的PPT课件,生动展示IP地址的相关知识。

4.实验设备:准备网络实验设备,让学生亲身体验IP地址的应用。

五、教学评估为了全面、客观地评估学生的学习成果,我们将采取以下评估方式:1.平时表现:通过观察学生在课堂上的参与度、提问回答等情况,评估学生的学习态度和理解程度。

2.作业:布置与IP地址相关的作业,评估学生对知识点的掌握情况。

计算机网络课程设计IP数据包解析(共5篇)

计算机网络课程设计IP数据包解析(共5篇)

计算机网络课程设计IP数据包解析(共5篇)第一篇:计算机网络课程设计 IP数据包解析课设名称:IP数据包解析班级:学号:姓名:指导老师:日期: 2012.6.15计算机网络课程设计报告目录1.课程设计目的 (1)2.课程设计要求 (1)3.程序设计分析 (1)3.1 网卡设置 (1)3.2 使用套接字 (2)3.2.2 接收数据包 (2)3.3 定义IP头部的数据结构 (3)3.4 IP包的解析 (3)3.5 协议的定义 (4)3.6捕获处理 (4)4.运行结果 (5)5.总结 (5)6.源程序代码 (6)Ip数据包解析1.课程设计目的本课程设计的目的就是设计一个捕获并解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP 层的工作原理有更好的理解和认识。

2.课程设计要求本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。

程序的具体要求如下:1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile则代表记录结果的日志文件。

2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。

3)当程序接收到键盘输入Ctrl+C时退出3.程序设计分析3.1 网卡设置为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。

但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。

对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地Ip数据包解析址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。

我们要想获取网络设备的所有数据包,就是需要将网卡设置为混杂模式。

解析IP数据包课程设计报告

解析IP数据包课程设计报告

成绩评定表课程设计任务书目录1 课程设计目的 (1)2 课程设计要求 (2)3 相关知识 (3)4 课程设计分析 (6)5 程序代码 (11)6 运行结果与分析 (18)7 参考文献 (18)1 课程设计目的IP数据包是网络成传输的基本数据单元,熟悉IP数据包结构对于理解网络工作原理具有重要意义。

本课程设计的主要目的是通过接受与解析IP数据包,了解IP数据包的基本结构与IP协议的基本功能。

2 课程设计要求根据后面介绍的IP数据包结构,编写程序接收并解析IP数据包。

1)以命令行形式运行;ParsePacket log_file其中,ParsePacket为程序名,log_file为日志文件名。

2)输出内容:IP数据包的各字段值,包括版本、头部长度、服务类型、总长度、标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等。

3)当程序接收到键盘输入Ctrl+C时退出。

3相关知识互联网络层是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之间,是可变的.0 4 8 16 19 24 31(位)图3.1 IP数据包的格式服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.图3.1 服务类型字段结构优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义.表3.2 优先子域的说明在4位服务类型子域中b4,b3,b2,b1分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本).表3.3列出了服务器类型自域的构成.总长度字段为2B,它定义了以字节为单位的数据包的总长度.IP数据包的最大长度为65535B.标识字段的长度为16位,用于识别IP数据包的编号.每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组.报头中的标志字段如图7-3所示.标志字段共3位,最高位是0.禁止分片标志DF(do not fragment)字段的值若为1,表示不能对数据包分片;若DF值为0,则表明可以分片.分片标志MF( more fragment)的值为1,表示接收到的不是最后一个分片;若MF值为0,表示接收到的是最后一个分片.片偏移字段共13位,说明分片在整个数据包中的相对位置.片偏移值是以8B为单位来记数的,因此选择的分片长度应该是8B的整数倍.生存时间(TTL)字段为8位,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的.协议字段为8位,表示使用此IP数据包的高层协议类型,常用的协议号如表7-3所示.表7.3 典型的协议号头校验和字段为16位,用于存放检查报头错误的校验码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

成绩评定表课程设计任务书目录1 课程设计目的 (1)2 课程设计要求 (2)3 相关知识 (3)4 课程设计分析 (6)5 程序代码 (11)6 运行结果与分析 (18)7 参考文献 (18)1 课程设计目的IP数据包是网络成传输的基本数据单元,熟悉IP数据包结构对于理解网络工作原理具有重要意义。

本课程设计的主要目的是通过接受与解析IP数据包,了解IP数据包的基本结构与IP协议的基本功能。

2 课程设计要求根据后面介绍的IP数据包结构,编写程序接收并解析IP数据包。

1)以命令行形式运行;ParsePacket log_file其中,ParsePacket为程序名,log_file为日志文件名。

2)输出内容:IP数据包的各字段值,包括版本、头部长度、服务类型、总长度、标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等。

3)当程序接收到键盘输入Ctrl+C时退出。

3相关知识互联网络层是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之间,是可变的.***********(位)图3.1 IP数据包的格式服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.图3.1 服务类型字段结构优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义.表3.2 优先子域的说明在4位服务类型子域中b4,b3,b2,b1分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本).表3.3列出了服务器类型自域的构成.总长度字段为2B,它定义了以字节为单位的数据包的总长度.IP数据包的最大长度为65535B.标识字段的长度为16位,用于识别IP数据包的编号.每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组.报头中的标志字段如图7-3所示.标志字段共3位,最高位是0.禁止分片标志DF(do not fragment)字段的值若为1,表示不能对数据包分片;若DF值为0,则表明可以分片.分片标志MF( more fragment)的值为1,表示接收到的不是最后一个分片;若MF值为0,表示接收到的是最后一个分片.片偏移字段共13位,说明分片在整个数据包中的相对位置.片偏移值是以8B为单位来记数的,因此选择的分片长度应该是8B的整数倍.生存时间(TTL)字段为8位,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的.协议字段为8位,表示使用此IP数据包的高层协议类型,常用的协议号如表7-3所示.表7.3 典型的协议号头校验和字段为16位,用于存放检查报头错误的校验码。

检验的范围是整个IP包的报头。

校验和按如下方法计算:1)将头校验和的字段置为0。

2)将报头部分的所有数据以16位为单位进行累加,累加方式是求异或。

3)将累加的结果取反码,就是头校验和。

当收到一个IP包时,要检查报头是否出错,就把报头中的所有数据以16位为单位进行累加,若累加的结果为0,则报文没有出错。

地址字段包括源地址和目的地址。

源地址和目的地址的长度都是32位,分别表示发送数据包的源主机和目的主机的IP地址。

选项字段的长度范围为0~40B,主要用于控制和测试。

在使用选项字段的过程中,有可能出现报头部分的长度不是32位的整数倍的情况。

如果出现这种情况,就需要通过填充位来凑齐。

4课程设计分析为了获取网络中的IP数据包,必须对网卡进行编程,在这里我们使用套接字(socket)进行编程。

但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式出发的数据包。

对于其他形式的数据包,如已到达网络接口但却不是发送到此地址的数据包,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。

我们要想获取流经网络设备的所有数据包,就需要将网卡设置为混杂模式。

本程序主要由三部分构成:初始化原始套接字,反复监听捕获数据包和解析数据包。

下面就结合核心代码对程序的具体实现进行讲解,同时使程序流程更加清晰,去掉了错误检查等保护性代码。

4.1使用原始套接字套接字分为三种,即流套接字(Stream Socket)、数据报套接字(Datagram Socket)和原始套接字(Raw Socket)。

要进行IP数据包的接受与发送,应使用原始套接字。

创建原始套接字的代码如下:SOCKET sockSock=WSASoccet(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERRLAPP ED);在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头进行处理。

BOOL flag=true;setsockopt (sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));之后,使用如下代码完成对socket的初始化工作/*获取主机名*/char hostname[128];gethostname(hostname, 100);/*获取IP地址*/hostent *pHostIP;pHostIP=gethostbyname(hostname);/* 填充SOCKADDR_IN的结构内容*/sockaddr_in addr_in;addr_in.sin_addr= *(in_addr*)pHostIP->h_addr_list[0];addr_in.sin_family=AF_TNET;addr-in.sin_port=htons(6000);/* 绑定socket */bind(sock, (POSCKADDR)&addr_in,sizeof(addr_in));填写sockaddr_in的内容时,其地址值应填写为本机IP地址可以通过gethostbyname()函数获取;端口号可以随便填写,但不能与系统冲突;协议族应填写为AF_INET。

注意,sockaddr_in 结构的值必须是以网络字节顺序表示的值,而不能直接使用本机字节顺序的值,使用htoms()函数可以将无符号短整型的主机数据转换为网络字节的顺序的数据。

最后使用bind()函数将socket绑定到本地网卡上。

绑定网卡后,需要WSAIoctl()函数把网卡设置为混杂模式,使网卡能够接收所有网络数据,其关键代码如下:#define SIO_RCV ALL_WSAIOW(IOC_VENDOR,1)DWORD dwBufferLen[10];DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(SnifferSocket,IO-RCV ALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,Sizeof(dwBufferLen),&dwByteReturned,NULL,NULL);如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收到的数据就拷贝到套接字中。

因此,网卡就可以接收所有经过的IP包。

4.2接收数据包在程序中可使用RECV()函数接收经过的IP包。

该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收到缓冲区的地址;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如果对所发送的数据没特殊要求,直接设为0。

因为IP数据包的最大长度是65536B,因此缓冲区的大小不能小于65535B。

设置缓冲区后,可利用循环来反复监听接收IP包,用recv()函数接收功能的代码如下:#dedine BUFFER_SIZE 65535Char buffer[BUFFER_SIZE]; //设置缓冲区While(true){recv(sock,buffer,BUFFER_SIZE,0); //j接收数据包4.3定义IP头部的数据结构程序需要定义一个数据结构表示IP头部。

这个数据结构应该和图7-1吻合,其代码如下:typedef struct _IP_HEADER //定义IP头{union{BYTE Version; //版本前4位BYTE HdrLen; //报头标长(后四位),IP头长度};BYTE ServiceType;//服务类型WORD TotalLen; //总长度WORD ID; //标识union{WORD Flags; //标志Word FragOff; //分段偏移};BYTE TimeToLive; //生命期BYTE Protiocol; //协议WORD HdrChksum; //头校验和DWORD SrcAddr; //源地址DWORD DstAddr: //目的地址BYTE Options; //选项}IP_HEADER;这是我们只考虑IP头部结构,不考虑数据部分。

相关文档
最新文档