您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 网络程序设计-09-原始套接字-网络嗅探器v1.0.0
原始套接字——网络嗅探器《网络程序设计》2原始套接字-引入前续课程中我们了解到,使用Socket可以方便的进行网络通信,通信内容由Socket封装为TCP/UDP数据报在网络上传输,开发者不用关心TCP/UDP数据报文是如何封装的。但是,有时我们需要对底层网络协议进行处理,如发送自定义的IP包、接收/解析网络上的数据包等。这时就需要使用原始套接字技术。3原始套接字1.原始套接字概述2.协议数据头部格式定义3.网络嗅探器开发实例4.小结5.动手实践4原始套接字1.原始套接字概述2.协议数据头部格式定义3.网络嗅探器开发实例4.小结5.动手实践51.原始套接字概述1.1.什么是原始套接字原始套接字(RawSocket)是一种套接字类型,是使开发者能够直接对底层网络协议数据报(如IP报文)进行处理的套接字。Raw英文含义:adj.生的,未加工的;n.半成品,原料。61.原始套接字概述1.2.原始套接字的适用场景(1)发送自己封装的网络报文可以是预定义的协议,如ICMP、TCP、UDP等;也可以是自定义的协议。(2)接收/解析原始网络报文常见的网络嗅探器(sniffer)就是抓取和解析原始的网络报文实现的。71.原始套接字概述1.3.如何创建原始套接字示例:SOCKETrawSocket=socket(AF_INET,SOCK_RAW,IPPROTO_IP);81.原始套接字概述1.4.需要注意的问题(1)操作系统对原始套接字的使用有一定限制(2)使用原始套接字需要深入理解TCP/IP协议格式9原始套接字1.原始套接字概述2.协议数据头部格式定义3.网络嗅探器开发实例4.小结5.动手实践102.协议数据头部格式定义2.1.IPv4头格式typedefstruct_IPHeader//20字节的IP头{UCHARiphVerLen;//版本号和头长度(各占4位)UCHARipTOS;//服务类型USHORTipLength;//封包总长度,即整个IP报的长度USHORTipID;//封包标识,惟一标识发送的每一个数据报USHORTipFlags;//标志UCHARipTTL;//生存时间,就是TTLUCHARipProtocol;//协议,可能是TCP、UDP、ICMP等USHORTipChecksum;//校验和ULONGipSource;//源IP地址ULONGipDestination;//目标IP地址}IPHeader,*PIPHeader;112.协议数据头部格式定义2.2.TCP头格式typedefstruct_TCPHeader//20字节的TCP头{USHORTsourcePort;//16位源端口号USHORTdestinationPort;//16位目的端口号ULONGsequenceNumber;//32位序列号ULONGacknowledgeNumber;//32位确认号UCHARdataoffset;//高4位表示数据偏移UCHARflags;//6位标志位USHORTwindows;//16位窗口大小USHORTchecksum;//16位校验和USHORTurgentPointer;//16位紧急数据偏移量}TCPHeader,*PTCPHeader;12原始套接字1.原始套接字概述2.协议数据头部格式定义3.网络嗅探器开发实例4.小结5.动手实践133.网络嗅探器开发实例3.1.网络嗅探器设计原理网络嗅探器即网络数据包捕获与分析工具,常见的有Sniffer、Wireshark等。一般可用于网络协议分析或网络安全问题分析。通常套接字程序只能响应与自己MAC地址相匹配的或是以广播形式发出的数据帧,对于其它形式的数据帧网卡会将其直接丢弃。为使网卡能够捕获所有经过它的数据包,要将其设为混杂模式。原始套接字可以将网卡设为混杂模式,方法是向套接字发送SIO_RCVALL控制命令。143.网络嗅探器开发实例3.1.网络嗅探器设计原理程序流程图:创建原始套接字获取本机IP地址绑定本机IP地址设置网卡为混杂模式接收一个数据包解析/显示数据包153.网络嗅探器开发实例3.2.网络嗅探器编程实现3.3.测试网络嗅探器16原始套接字1.原始套接字概述2.协议数据头部格式定义3.网络嗅探器开发实例4.小结5.动手实践174.原始套接字-小结原始套接字(RawSocket)是一种套接字类型。原始套接字使开发者能够直接对底层网络协议数据报(如IP报文)进行处理。其适用的场景主要是:(1)发送自己封装的网络报文;(2)接收/解析原始网络报文。需要注意的是:(1)操作系统对原始套接字的使用有一定限制;(2)使用原始套接字需要深入理解TCP/IP协议格式。18原始套接字1.原始套接字概述2.协议数据头部格式定义3.网络嗅探器开发实例4.小结5.动手实践195.动手实践动手实践环节(1)认真阅读、分析、理解示例中的网络嗅探器代码;(2)尝试添加对UDP或ICMP协议数据的解析功能。20课后作业1.列举原始套接字的适用场景。2.用代码示例如何创建原始套接字。3.列举两个使用原始套接字需要注意的问题。4.画出使用原始套接字编写网络嗅探器的程序流程图。网络程序设计谢谢!
本文标题:网络程序设计-09-原始套接字-网络嗅探器v1.0.0
链接地址:https://www.777doc.com/doc-3264305 .html