计算机网络课程设计_IP数据包的捕获与分析
- 格式:doc
- 大小:349.50 KB
- 文档页数:19
实验三 网络数据包的捕获与分析一、实验目的和要求通过本次实验,了解sniffer 的基本作用,并能通过sniffer 对指定的网络行为所产生的数据包进行抓取,并分析所抓取的数据包。
二、实验内容A :1、首先打开sniffer 软件,对所要监听的网卡进行选择2、选择网卡按确定后,进入sniffer 工作主界面,对主界面上的操作按钮加以熟悉。
B :设置捕获条件进行抓包基本的捕获条件有两种:1、链路层捕获,按源MAC 和目的MAC 地址进行捕获,输入方式为十六进制连续输入,如:00E0FC123456。
2、IP 层捕获,按源IP 和目的IP 进行捕获。
输入方式为点间隔方式,如:10.107.1.1。
如果选择IP 层捕获条件则ARP 等报文将被过滤掉。
链任意捕获条件编辑协议捕获编辑缓冲区编辑基本捕获条件路层捕获IP 层捕获数据流方向链路层捕获地址条件高级捕获条件在“Advance ”页面下,你可以编辑你的协议捕获条件,如图:选择要捕获的协议捕获帧长度条件错误帧是否捕获保存过滤规则条件高级捕获条件编辑图在协议选择树中你可以选择你需要捕获的协议条件,如果什么都不选,则表示忽略该条件,捕获所有协议。
在捕获帧长度条件下,你可以捕获,等于、小于、大于某个值的报文。
在错误帧是否捕获栏,你可以选择当网络上有如下错误时是否捕获。
在保存过滤规则条件按钮“Profiles”,你可以将你当前设置的过滤规则,进行保存,在捕获主面板中,你可以选择你保存的捕获条件。
C:捕获报文的察看:Sniffer软件提供了强大的分析能力和解码功能。
如下图所示,对于捕获的报文提供了一个Expert专家分析系统进行分析,还有解码选项及图形和表格的统计信息。
专家分析系统专家分析系统捕获报文的图形分析捕获报文的其他统计信息专家分析专家分分析系统提供了一个只能的分析平台,对网络上的流量进行了一些分析对于分析出的诊断结果可以查看在线帮助获得。
在下图中显示出在网络中WINS查询失败的次数及TCP重传的次数统计等内容,可以方便了解网络中高层协议出现故障的可能点。
ip抓包课程设计一、课程目标知识目标:1. 学生能理解IP抓包的基本概念,掌握抓包工具的使用方法。
2. 学生能分析网络数据包的结构,识别各类协议及其特点。
3. 学生能了解网络通信过程中数据包的传输过程,理解网络延迟、丢包等现象的产生原因。
技能目标:1. 学生能运用抓包工具捕获并分析实时网络数据包,具备网络问题排查能力。
2. 学生能通过抓包数据,分析网络攻击手段,提高网络安全意识。
3. 学生能独立完成网络数据包分析任务,具备一定的网络故障处理能力。
情感态度价值观目标:1. 培养学生积极探索网络知识的兴趣,提高学习主动性和积极性。
2. 增强学生对网络安全的重视,树立正确的网络道德观念。
3. 培养学生团队协作精神,提高沟通与表达能力。
本课程针对高中年级学生,结合计算机网络知识,设计IP抓包课程。
课程性质为实践性、探究性,旨在让学生在实际操作中掌握网络知识,提高网络技能。
根据学生特点,课程注重培养学生的学习兴趣和动手能力,强调理论知识与实践操作相结合。
教学要求明确,注重培养学生的网络安全意识和团队协作精神,为后续学习及实际应用打下坚实基础。
通过本课程的学习,学生将具备一定的网络问题排查和解决能力,为我国培养高素质的网络技术人才做好准备。
二、教学内容1. 理论知识:- 计算机网络基础:网络分层模型、IP地址、端口等基本概念。
- 抓包工具介绍:Wireshark等抓包工具的安装与使用方法。
- 网络协议分析:TCP/IP协议族、HTTP、HTTPS、FTP等常用协议的特点及抓包分析技巧。
2. 实践操作:- 抓包工具操作演示:教师现场演示抓包过程,分析数据包结构。
- 学生动手实践:分组进行抓包实验,分析特定协议数据包,识别网络攻击行为。
- 网络问题排查:利用抓包工具进行网络故障排查,分析并解决实际问题。
3. 教学大纲:- 第一课时:计算机网络基础及抓包工具介绍。
- 第二课时:网络协议分析及抓包操作演示。
- 第三课时:学生动手实践,分组进行抓包实验。
任务三计算机网络实验IP数据报捕获与分析一、实验目的本实验的目的是通过使用网络抓包工具捕获IP数据报,了解IP协议的工作过程,分析数据报的结构和内容。
二、实验设备和工具1.计算机2.网络抓包工具:Wireshark三、实验原理IP(Internet Protocol)是网络层的核心协议,在互联网中承担着数据包的传输任务。
IP协议负责将数据包从源主机传输到目标主机,保证数据在不同主机之间的正确传输。
IP数据报是IP协议传输的基本单位,由IP头和数据部分组成。
IP头部包含以下重要字段:1.版本(4位):表示IP协议的版本号,IPv4为4,IPv6为62.首部长度(4位):表示IP头部的长度,以32位的字节为单位。
3.区分服务(8位):用于标识优先级和服务质量等信息。
4.总长度(16位):指明整个IP数据报的长度。
5.标识(16位):用于标识同一个数据报的分片。
6.标志位(3位):标记是否进行数据报的分片。
7.片偏移(13位):表示数据报组装时的偏移量。
8.生存时间(8位):表示数据报在网络中的存活时间。
9.协议(8位):指明IP数据报中携带的数据部分所使用的协议,如TCP、UDP等。
10.头部校验和(16位):用于对IP头部的校验。
11.源IP地址(32位):指明数据报的发送者的IP地址。
12.目的IP地址(32位):指明数据报的目标IP地址。
四、实验步骤1.安装Wireshark软件。
2.打开Wireshark软件,选择需要进行抓包的网络接口。
3.点击“开始”按钮,开始抓包。
4.进行相关网络操作,产生数据包。
5.停止抓包。
6.选中其中一个数据包,进行分析。
五、数据包分析Wireshark软件可以对捕获到的数据包进行详细的分析,提供了丰富的信息和统计数据。
以下是对数据包的一些常规分析内容:1.源IP地址和目的IP地址:根据协议规定,每个IP数据报必须携带源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包进行解析.要求必须输出以下字段:版本号、总长度、标志位、片偏移、协议、源地址和目的地址。
二、实验环境平台:Windows编程环境:VC 6。
0语言:C++三、实验原理3.1 数据报格式以太帧由一个包含三个字段的帧头开始,前两个字段包含了物理地址,各六个字节,头部的第三个字段包含了 16 位的以太帧类型,帧头后面是数据区。
根据帧类型可以判断是哪种数据包,一般常用的有 0X0080(IP 数据包)、 0X0806(ARP 请求/应答)和 0X8035(RARP 请求/应答)三种类型.TCP/IP 协议簇中位于网络层的协议,也是最为核心的协议。
所有的 TCP, UDP, ICMP及 IGMP 数据都以 IP 数据报格式传输。
IP 协议提供了无连接的、不可靠的数据传输服务。
同时IP 协议的一个重要功能是为网络上的包传递提供路由支持。
TCP/IP 协议使用 IP 数据报这个名字来指代一个互联网数据包。
IP 数据报由两部分组成,前面的头部和后面的数据区,头部含有描述该数据报的信息,包括源 IP 地址和目的 IP 地址等。
在 IP 数据报的报头中的众多信息可根据协议类型字段区分出该数据包的类型,常用的有TCP 包、 UDP 包、 ICMP 包等,各格式分别如下所示:IP数据报格式TCP数据报格式ICMP数据报格式UDP数据报格式3。
2 捕获数据包方法目前常用的捕获数据包的方法有原始套接字、LibPcap、WinPcap和JPcap等方法.本次实验选用套接字方法。
套接字是网络应用编程接口。
应用程序可以使用它进行网络通信而不需要知道底层发生的细节。
有时需要自己生成一些定制的数据包或者功能并希望绕开Socket提供的功能,原始套接字(RawSocket)满足了这样的要求。
原始套接字能够生成自己的数据报文,包括报头和数据报本身的内容。
通过原始套接字,可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制.网络数据包截获机制一般指通过截获整个网络的所有信息流,根据信息源主机,目标主机,服务协议端口等信息,简单过滤掉不关心的数据,再将用户感兴趣的数据发送给更高层的应用程序进行分析。
计算机⽹络数据包的获取与分析实验报告课程设计报告数据包的获取与分析学院:专业班级:学⽣姓名:学号:指导教师:成绩:2011 年 12 ⽉1. 设计任务使⽤抓包软件抓取⽹络传输中的数据包,并对所抓取的数据包进⾏分析,在这⾥我使⽤的抓包软件是“锐捷”,使⽤“锐捷”抓包软件对邮件发送过程中所产⽣的数据包进⾏抓取,并从所抓取的数据包中筛选出邮件发送所产⽣的包,对其进⾏数据分析,包括数据包所属协议、作⽤以及⾸部字段和数据内容(具有相同功能的数据包只分析⼀次)。
并且需要截图做详细说明。
2. 操作步骤⾸先打开“锐捷”抓包软件,匿名登录上该软件。
从IE浏览器中打开163邮箱的登陆界⾯。
从⼀登陆上的界⾯点击开始按钮,开始捕捉⽹络中的数据包。
登陆163邮箱,编辑所要发送的邮件,编辑完成后,点击发送。
发送完成后,关闭邮箱。
查看并分析抓包软件所抓取的数据包。
3. 数据包分析3.1图3.1.1为我的主机的⽹络配置。
图3.1.1 计算机IP配置3.2 捕获到的数据包分析3.2.1 IP数据报的格式IP数据报的格式,在⽹络中要对I数据经⾏封装,在⽹络中要发送⼀个数据要对其进⾏封装。
3.2.1 IP数据包格式还需要地址解析协议ARP,如果主机A要向主机B发送IP数据报是如果⾼速缓存中没有主机B的IP地址,ARP进程在本局域⽹上⼴播发送⼀个ARP请求分组,主机B在ARP请求分组中看的⾃⼰的IP地址,就想主机A发送ARP响应分组,主机A收到主机B的响应分组后,就在ARP⾼速缓存中写⼊主机B的IP地址到MAC地址的映射。
图3.2.2为邮件发送过程中所发送的ARP请求。
3.2.2 ARP会话树3.2.3 ARP协议结构树由图3.2.3可见,该ARP 硬件类型 0001 协议类型 0800 硬件长度 6 协议长度 4 操作码 1 源物理地址8c-89-a5-fb-15 源IP地址10.10.20.102 ⽬标物理地址还未知3.2.2在⽹络层封装层IP数据包在⽹络层封装层IP数据包,数据链路层把⽹络层交下来的IP数据报添加⾸部和尾部封装成帧,并把封装好的帧发送给⽬的主机的数据链路层,对⽅的数据链路层收到的帧⽆差错,则从收到的帧中提取出IP数据报上交给上⾯的⽹络层,否则丢弃这个帧。
计算机网络课程设计报告题目端口检测及IP包的捕获解析学生姓名班级学号指导教师设计时间第一节实验平台和器材准备 (1)1.2 实验平台 (1)第二节需求分析 (1)2.1 实验要求 (1)2.1.1 基本要求 (1)2.1.3 详细功能要求 (1)第三节、概要设计 (1)3.1 端口监听 (1)3.2 IP包的捕获与解析 (2)第四节详细设计 (3)4.1端口监听程序框图 (3)4.2端口监听关键代码 (3)4.2 IP包捕获与解析程序框图 (4)4.2.1 写日志函数 (4)4.2.1 IP包捕获与分析 (5)第五节实验结果分析 (9)5.1 实验结果展示 (9)5.1.1 端口监听 (9)5.1.2 IP包的捕获与解析析 (11)5.1 实验结果分析 (12)5.1.1 端口监听 (12)5.1.2 IP包的捕获与解析 (13)第六节错误调试 (14)6.1 数据库连接错误 (14)6.1.1 解决方案 (14)6.2 POST乱码解决方式 (15)6.2.1 错误表现 (15)6.2.2解决方案 (15)6.3 Socket连接错误 (16)6.3.1 错误表现 (16)6.3.2产生错误的原因 (16)6.3.3 解决方式 (16)第八节实验总结 0第九节参考资料 (1)附件: (2)第一节实验平台和器材准备1.2 实验平台第二节需求分析2.1 实验要求2.1.1 基本要求本次实验的要求在网络环境,实现端口检测以及捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
2.1.3 详细功能要求l)实现本机以及局域网内计算机的端口监控。
2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
3)形成记录结果的日志文件。
第三节、概要设计3.1 端口监听创建一个服务器s,依次开放0—65535间所有的端口,当开放过程抛出IO流异常e,并且e是.BindException的一个实例时,输出该端口被占用。
计算机网络课程设计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数据包捕获与分析实验目的:1、利用Iris捕获IP数据包;2、掌握IP数据包的格式;3、理解三次握手建立TCP/IP连接的过程、IP数据包的传输过程和四次握手释放连接的过程。
实验环境:●Iris●FTP Server实验步骤:1.安装Iris2.启动:开始> 程序> Iris > Iris3.设置:a)目标机器:View > Address Bookb)包过滤条件:Filters > Edit Filteri.IP Addressyer 2,31.frame:选中0800 DoD IP和0806 ARPyer 3+:选中ICMP、TCP、UDP4.捕获:Capture > Start5.使用IE连接FTP Server(ftp://202.196.213.232),下载文件6.停止7.分析:a)前两个ARP,全F,48位的1,广播地址b)经TCP/IP三次握手建立连接c)数据传输d)最后四个终止连接,标志位flag ——End of data(FIN)=1客户机C 向服务器S 发出连接请求报文段,设置标志位SYN=1,并选择一个初始序列号x ,表明在后面传送数据时的第一个数据字节的序号是x+1。
服务器S 接到连接请求后,如同意,则确认。
SYN 和ACK 都置1,并发送它本身的序列号y ,确认号为x+1,同时为自己选择一个序列号y 。
客户再确认它。
ACK 置1,确认号为y+1,序号为x+1。
在这三次确认后,开始传输数据。
发送第一个数据报时,序号仍为x+1,因前一个确认数据报并不消耗序号。
TCP 协议用FIN 报文(即TCP 报文头中的FIN 标志位置1)来请求关闭一个连接。
对方在收到一个FIN 报文后,应该马上给出回应,即确认报文(ACK=1),同时关闭该方向上的连接。
CENTRAL SOUTH UNIVERSITY计算机网络课程设计报告目录第一章课程设计的目的与要求 ........................... 错误!未定义书签。
1.1 课程设计的目的 .................................... 错误!未定义书签。
1.2 课程设计的要求 (1)第二章课程设计的内容 (3)2.1 课程设计的内容 (3)2.2 内容的要求 (3)第三章程序分析与设计 (4)3.1 IP数据包 (4)3.1.1 IP数据包的格式说明 (4)3.1.2 IP数据包的格式 (4)3.1.3 IP数据包的C++定义 (5)3.1.4 IP数据包的解析 (6)3.2 套接字 (7)3.1.4 套接字的使用 (7)3.1.4 使用原始套接字 (7)3.3 接受数据包 (7)第四章实验结果 (10)4.1 程序截图 (10)第五章总结 (11)5.1 实验心得 (11)第六章附录 (12)6.1 源代码 (12)第一章课程设计的目的与要求1.1 课程设计的目的计算机网络课程设计的目的,是为了让学生更深入地掌握计算机网络的核心内容,实现理论与实践相结合。
让学生用具体的实践成果,体现对理论知识的掌握程度。
有利于学生提高计算机网络的实践能力,加深对计算机网络理论知识的理解。
1.2 课程设计的要求(1)编写程序,实现系统的基本功能,鼓励自行增加新功能;(2)要有用户界面:要求至少采用文本菜单界面;鼓励采用图形菜单界面;(3)写课程设计报告,内容包括:●封面(参见附录I)●需求分析:以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?给出功能模块图和流程图。
同时明确规定:输入的形式和输出值的范围;输出的形式;程序所能够达到的功能;测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。
●概要设计:包括程序设计组成框图,程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。
●详细设计:包括模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等),每个模块的算法设计说明(可以是描述算法的流程图)。
其中源程序要按照写程序的规则来编写,结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
●运行结果:包括典型的界面、输入和输出数据等;●总结:包括课程设计中遇到的问题,解决问题的过程及体会、收获、对课程设计的认识与思考等。
●附录:包括主要程序清单,要有适当的注释,使程序容易阅读。
(4)课程设计报告书写规范参见附录II,不按照规范书写的,成绩不能评为“优”或“良”。
(5)无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、1规章制度,学生有事离校必须请假。
课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理。
2.1 课程设计的内容本次实验的要求在网络环境,使用VC++编写程序实现捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
2.2 内容的要求(1)以命令行形式运行(应如程序名+参数名):ipparse logfile,其中ipparse 是程序名,而logfile为该程序所带参数,其代表记录结果的日志文件。
(2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
(3)当程序接收到键盘输入Ctrl+C时退出。
3.1 IP数据包3.1.1 IP数据包的格式说明IP数据包格式包含了标头固定部分,标头可变部分和数据区三部分。
IP数据报标头部分固定为20个字节,其中包含了12个参数域,各参数域隐含着网间协议的传输机制。
IP具体的标头格式如图1所示。
各参数域的具体含义如下:1)版本号:长度4位,表示所使用的IP协议的版本。
IPv4版本号字段值为4;IPV6版本号字段号的值为6.2)标头长:长度4位,定义了一个以4B为一个单位的IP包的报头长度3)服务类型:共8位,高3位组成优先级子域,随后4位组成服务类型子域。
4)数据报总长度:总长度为2B(即6位)。
定义了以字节为单位的数据报的总长度。
5)重装标识:长度16位,用于识别IP数据报的编号,让目的主机判断新来的数据属于哪个分组。
6)分片标识:共3位,最高位为0;DF禁止分片标识。
DF=0,可以分片;DF=1,不能分片。
MF:分片标识。
MF=0,表示接的是最后一个分片;MF=1,不是最后一个分片。
7)片偏移值:共13位,说明分片在整个数据报中的相对位置。
8)生存周期:8位,用来设置数据数据报在整个网络传输过程中的寿命。
常以一个数据报可以经过的最多的路由器跳步数来控制。
9)协议类型:共8位,表示该IP数据报的高层协议类型。
10)标头校验和:共16位,用于存放检查报头错误的校验码。
11)源、宿主机地址:共32位,分别表示发送和接受数据报的源主机和宿主机的IP地址。
选项数据域:0-40B,用于控制和测试3.1.2 IP数据包的格式4位版本4位首部长度8位服务类型(TOS)16位总长度(字节为单位) 16位标识3位标志13位片偏移8位生存时间(TTL)8位协议16位首部检验和32位源IP地址32位目的IP地址3.1.3 IP数据包的C++定义typedef struct _IP{union{BYTE Version; // 版本BYTE HdrLen;//IHT};BYTE ServiceType; // 服务类型WORD TotalLen; // 总长WORD ID; // 标识union{WORD Flags; // 标志WORD FragOff; // 分段偏移};BYTE TimeToLive; // 生命期BYTE Protocol; // 协议WORD HdrChksum; // 头校验和DWORD SrcAddr; // 源地址DWORD DstAddr; // 目的地址BYTE Options; // 选项} IP;3.1.4 IP数据包的解析通过IP_HEADER解析IP头各个字段的代码:/*获取版本字段*/ip.Version>>4;/*获取头部长度字段*/ip.HdrLen & 0x0f;/*获取服务类型字段中的优先级子域*/ip.ServiceType>>5;/*获取服务类型字段中的TOS子域*/(ip.ServiceType>>1)&0x0f;/*获取总长度字段*/ip.TotalLen;/*获取标识字段*/ip.ID;/*解析标志字段*/DF = (ip.Flags>>14) & 0x01;MF = (ip.Flags>>13) & 0x01;/*获取分段偏移字段*/ip.FragOff & 0x1fff;/*获取生存时间字段*/ip.TimeToLive;/*获取协议字段*/ip.Protocol;/*获取头校验和字段*/ip.HdrChksum;/*解析源IP地址字段*/inet_ntoa(*(in_addr*)&ip.SrcAddr);/*解析目的IP地址字段*/inet_ntoa(*(in_addr*)&ip.DstAddr);3.2 套接字3.2.1 套接字的使用本程序使用套接字socket编程,将网卡设为能够接受流经网卡的所有类型的数据包。
首先,初始化套接字,然后监听数据包,解析数据包。
SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用来创建套接字,其参数为通信发生的区字段和套接字的类型。
WSAIoctl(sock,IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen)函数用来把网卡设置为混杂模式。
recv(sock,buffer,65535,0)函数用来接收经过的IP包,其参数分别是套接字描述符,缓冲区的地址,缓冲区的大小。
3.2.1 使用原始套接字要进行IP层数据包的接收和发送,应使用原始套接字。
创建原始套接字的代码如下:SOCKET sock;sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);在WSASoccket函数中,第一个参数指定通信发生的区字段,AF_INET是针对Internet的,允许在远程主机之间通信。
第二个参数是套接字的类型,在AF_INET 地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三种套接字类型。
在这里,设置为SOCK_RAW,表示声明的是一个原始套接字类型。
第三个参数依赖于第二个参数,用于指定套接字所有的特定协议,这里使用IP协议。
第四个参数为WSAPROTOCOL_INFO 位,该位可以置空。
第五个参数保留,永远置0。
第六个参数是标志位,WSA_FLAG_OVERLAPPED表明可以使用发送接收超时设置。
创建原始套接字后,IP头就会包含在接收的数据中。
然后,可以设置IP头操作选项,调用setsockopt函数。
其中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_INET;addr_in.sin_port = htons(6000);/*绑定socket*/bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in));填写sockaddr_in的内容时,其地址值应填写为本机IP地址,本机IP地址可以通过gethostbyname()函数获取;端口号可以随便填写,但不能与系统冲突;协议族应填为AF_INET。