ImageVerifierCode 换一换
格式:DOCX , 页数:57 ,大小:1.17MB ,
资源ID:5539404      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5539404.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(浅谈网络嗅探器tcpdump.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

浅谈网络嗅探器tcpdump.docx

1、浅谈网络嗅探器tcpdump兰州职业技术学院(信息工程系)毕业设计(论文)课 题 浅谈入侵检测- tcpdump 所属教学单位 电子与信息工程系 专 业 计算机网络技术 年 级 11A网络2班 学 号 20112044 姓 名 贾居宝 指导教师 毛敬玉 2013年9 月17日兰州职业技术学院(信息工程系)毕业设计(论文)任务书课 题 浅谈网络嗅探器-tcpdump 20XX年X月X 日至20XX年X月X日共10周专 业 计算机网络技术 年 级 11A网络2班 姓 名 贾居宝 学 号 20112044 所属教学单位负责人(签字) 指 导 教 师 (签字) 年 月 日课题来源自拟课题课题的目的、意

2、义目的:1.熟悉网络嗅探器,掌握网络嗅探器的功能。2.了解网络嗅探器-Tcpdump的安装和使用。3.分析网络嗅探器Tcpdump的抓包过程。意义:网络技术日新月异,发展突飞猛进。随着计算机网络的广泛应用,其作用也越来越重要。但是由于计算机系统中软、硬件的脆弱性和计算机网络的脆弱性以及地理分布的位置、自然环境、自然破坏以及人为因素的影响,不仅增加了信息存储、处理的风险,也给信息传送带来了新的问题。计算机网络安全问题越来越严重,网络破坏所造成的损失越来越大。Internet的安全已经成为亟待解决的问题。作为互联网上的系统管理员必备工具。Tcpdump以其强大的功能,灵活的截取策略,成为每个高级的

3、系统管理员分析网络,排查问题等所必备的工具之一。要求1用户界面友好、简洁,易于操作;2实现抓取数据包的功能;3实现停止抓取数据包的功能;4实现过滤数据包的功能;5能显示数据包详细信息,并对数据包进行分析。课题主要内容及进度课题主要内容:网络嗅探器的概念、网络嗅探器的工作原理;设计一个网络嗅探器,实现数据包的捕获、解析和显示。毕业论文(设计)进度安排:起 讫 日 期 工 作 内 容 备 注第一周到第四周 收集资料确定技术路线,完成开题报告和文献综述 第五周到第十周系统规划、设计 第十一周到第十四周程序开发、调试 第十五周整理材料、撰写论文、系统验收以上各项由指导教师填写(请用黑色中性笔填写,也可

4、用计算机输入打印)。摘要本设计是关于网络嗅探器的设计与实现 ,功能包括实现网络层抓包 ,对获得包的源和目的地址、端口、协议等进行分析和实现简单的包嗅探器功能。以vc为开发平台,使用Linux环境下的网络数据包捕获开发库WinPcap认真学习和掌握网络嗅探器工作原理,设计出一个嗅探器,使其实现网络层抓包,并对获得包的源和目的地址、端口、协议等进行分析,实现简单的包嗅探器功能。关键字:tcpdump,sniffer抓包,winpcap, c+目录摘要 I目录 II第一章 网络嗅探器的介绍 11 什么是网络嗅探器 12 网络嗅探器的作用 13 网络嗅探器的原理 14 网络嗅探器的设计 4第二章 详细

5、分析 61 嗅探器设计需要包含的头文件有: 62 Ip数据报头的结构体: 63 Tcp报头结构体: 64 Udp报头结构体: 75 变量: 76 过滤规则: 87 循环抓包: 88 源代码: 11第三章 tcpdump简介 16第四章 Linux下sniffer工具Tcpdump安装使用 181 Tcpdump的安装 182 Tcpdump的使用 193 Snoop与tcpdump比较 22第五章 利用TcpDump分析网络安全 231 网络数据采集分析工具TcpDump分析 232 网络的数据显示/输入输出 23第六章 Tcpdump文件格式和结构 27第七章 tcpdump抓包分析TCP三

6、次握手过程 29第八章 TCPdump抓包及分析方法 321 抓包分析快进快退 32第九章 自我总结Android系统手机端数据抓包过程 34第十章 总结 37参考文献 38第一章 网络嗅探器的介绍1 什么是网络嗅探器随着网络发展的不断延续,网络应用日益复杂,以满足人们对信息的大量需求,但伴随而来的是,大量网络故障及网络病毒冲击着网络与终端用户,因此对于网络安全管理与网络日常的要求日益加重。嗅探器(Sniffer Pro)有着至关重要的作用。嗅探器是利用计算机网络接口截获所需网络内部数据报文的一种工具,它广泛地应用于流量分析、安全监控的实现中。Sniffer主要被用来在网络上截获位于OSI协议

7、模型中各个协议层次上的数据包,通过对截获数据包的分析,嗅探器可以掌握目标主机的信息。嗅探器,可以理解为一个安装在计算机上的窃听设备它可以用来窃听计算机在网络上所产生的众多的信息。简单一点解释:一部电话的窃听装置, 可以用来窃听双方通话的内容,而计算机网络嗅探器则可以窃听计算机程序在网络上发送和接收到的数据。 可是,计算机直接所传送的数据,事实上是大量的二进制数据。因此, 一个网络窃听程序必须也使用特定的网络协议来分解嗅探到的数据, 嗅探器也就必须能够识别出那个协议对应于这个数据片断,只有这样才能够进行正确的解码。 计算机的嗅探器比起电话窃听器,有他独特的优势: 很多的计算机网络采用的是“共享媒

8、体。也就是说,你不必中断他的通讯,并且配置特别的线路,再安装嗅探器,你几乎可以在任何连接着的网络上直接窃听到你同一掩码范围内的计算机网络数据。我们称这种窃听方式为“基于混杂模式的嗅探”(promiscuous mode) 。 尽管如此,这种“共享” 的技术发展的很快,慢慢转向“交换” 技术,这种技术会长期内会继续使用下去, 它可以实现有目的选择的收发数据。2 网络嗅探器的作用嗅探器是网络的抓包工具,可以对网络中大量数据抓取,从而方便使用者对网络中用户的一些信息进行分析,所以,通常被黑客运用于网络攻击。我们如果也能掌握网络嗅探器的原理和设计,可以将它运用与网络故障检测、网络状况的监视,还可以加强

9、企业信息安全防护。3 网络嗅探器的原理 嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即可以是发给它的也可以是发往别处的。显然,要达到此目的就不能再让网卡按通常的正常模式工作,而必须将其设置为混杂模式。具体到编程实现上

10、,这种对网卡混杂模式的设置是通过原始套接字(raw socket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。在创建了原始套接字后,需要通过setsockopt()函数来设置IP头操作选项,然后再通过bind()函数将原始套接字绑定到本地网卡。为了让原始套接字能接受所有的数据,还需要通过ioctlsocket()来进行设置,而且还可以指定是否亲自处理IP头。至此,实际就可以开始对网络数据包进行嗅探了,对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成。但是与其他两种套接字不同的是,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有 IP头、

11、 TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。下面先给出结构.数据包的总体结构:数据包IP头 TCP头(或其他信息头) 数据数据在从应用层到达传输层时,将添加TCP数据段头,或是UDP数据段头。其中UDP数据段头比较简单,由一个8字节的头和数据部分组成,具体格式如下:16位 16位源端口 目的端口UDP长度 UDP校验和而TCP数据头则比较复杂,以20个固定字节开始,在固定头后面还可以有一些长度不固定的可选项,下面给出TC

12、P数据段头的格式组成:16位 16位源端口 目的端口顺序号确认号TCP头长 (保留)7位 URG ACK PSH RST SYN FIN 窗口大小校验和 紧急指针可选项(0或更多的32位字)数据(可选项)对于此TCP数据段头的分析在编程实现中可通过数据结构_TCP来定义:typedef struct _TCP WORD SrcPort; / 源端口WORD DstPort; / 目的端口DWORD SeqNum; / 顺序号DWORD AckNum; / 确认号BYTE DataOff; / TCP头长BYTE Flags; / 标志(URG、ACK等)WORD Window; / 窗口大小W

13、ORD Chksum; / 校验和WORD UrgPtr; / 紧急指针 TCP;typedef TCP *LPTCP;typedef TCP UNALIGNED * ULPTCP;在网络层,还要给TCP数据包添加一个IP数据段头以组成IP数据报。IP数据头以大端点机次序传送,从左到右,版本字段的高位字节先传输(SPARC是大端点机;Pentium是小端点机)。如果是小端点机,就要在发送和接收时先行转换然后才能进行传输。IP数据段头格式如下:16位 16位版本 IHL 服务类型 总长标识 标志 分段偏移生命期 协议 头校验和源地址目的地址选项(0或更多) 同样,在实际编程中也需要通过一个数据结

14、构来表示此IP数据段头,下面给出此数据结构的定义:typedef struct _IPunion BYTE Version; / 版本BYTE HdrLen; / IHL;BYTE ServiceType; / 服务类型WORD TotalLen; / 总长WORD ID; / 标识union WORD Flags; / 标志WORD FragOff; / 分段偏移;BYTE TimeToLive; / 生命期BYTE Protocol; / 协议WORD HdrChksum; / 头校验和DWORD SrcAddr; / 源地址DWORD DstAddr; / 目的地址BYTE Option

15、s; / 选项 IP;typedef IP * LPIP;typedef IP UNALIGNED * ULPIP;在明确了以上几个数据段头的组成结构后,就可以对捕获到的数据包进行分析了。嗅探器的具体实现根据前面的设计思路,不难写出网络嗅探器的实现代码,下面就给出一个简单的示例,该示例可以捕获到所有经过本地网卡的数据包,并可从中分析出协议、IP源地址、IP目标地址、TCP源端口号、TCP目标端口号以及数据包长度等信息。由于前面已经将程序的设计流程讲述的比较清楚了,因此这里就不在赘述了,下面就结合注释对程序的具体是实现进行讲解,同时为程序流程的清晰起见,去掉了错误检查等保护性代码。主要代码实现清

16、单为:/ 检查 Winsock 版本号,WSAData为WSADATA结构对象WSAStartup(MAKEWORD(2, 2), &WSAData);/ 创建原始套接字sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);/ 设置IP头操作选项,其中flag 设置为ture,亲自对IP头进行处理setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag);/ 获取本机名gethostname(char*)LocalName, sizeof(LocalName)-1);/ 获取本地

17、IP 地址pHost = gethostbyname(char*)LocalName);/ 填充SOCKADDR_IN结构addr_in.sin_addr = *(in_addr *)pHost-h_addr_list0; /IPaddr_in.sin_family = AF_INET;addr_in.sin_port = htons(57274);/ 把原始套接字sock 绑定到本地网卡地址上bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in);/ dwValue为输入输出参数,为1时执行,0时取消DWORD dwValue = 1;/ 设置 SOC

18、K_RAW 为SIO_RCVALL,以便接收所有的IP包。其中SIO_RCVALL/ 的定义为: #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)ioctlsocket(sock, SIO_RCVALL, &dwValue);前面的工作基本上都是对原始套接字进行设置,在将原始套接字设置完毕,使其能按预期目的工作时,就可以了。4 网络嗅探器的设计在以太网中, 信息是以明文的形式在网络上传输 2 , 当将网络适配器设置为混杂模式时, 由于采用以太网广播信道争用的方式, 使得监听系统与正常通信的网络能够并联连接, 并可捕获任何一个在同一冲突域上传输的数据包。IEEE8

19、02. 3 标准的以太网采用的是持续CSMA 的方式, 正是由于以太网采用这种广播信道争用的方式, 使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截我所要的信息, 这是捕获数据包的物理基础。首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包, 这就要求一部分运行在操作系统核心内部, 直接与网络接口驱动交互。这个部分是系统依赖的, 在W inpcap 的解决方案里它被认为是一个设备驱动, 称作NPF ( NetgroupPacket F ilter) 。W inpcap 提供了两个不同的库: Packet. dll 和W pcap. dll。Wpcap

20、. dll提供了更加友好、功能更加强大的函数调用。W inPcap 的优势在于提供了一套标准的抓包接口, 与libpcap 兼容, 可使得原来许多UN IX 平台下的网络分析工具快速移植过来,便于开发各种网络分析工具, 充分考虑了各种性能和效率的优化, 包括对于NPF 内核层次上的过滤器支持, 支持内核态的统计模式, 提供了发送数据包的能力。前者提供了一个底层AP I, 伴随着一个独立于M icrosoft 操作系统的编程接口, 这些AP I可以直接用来访问驱动的函数; 后者导出了一组更强大的与libpcap 一致的高层抓包函数库( capture prmi itives) 。这些函数使得数据

21、包的捕获以一种与网络硬件和操作系统无关的方式进行。网络嗅探器工作在网络环境的底层, 拦截所有正在网络上传送的数据, 并且通过相应的解析处理, 可以实时分析这些数据的内容, 进而分析所处的网络状态和整体拓扑布局。含了相应设备的名称和描述。取得网卡列表后就在屏幕上显示出来, 如果网卡没有被发现就显示有关错误, pcap _ findalldevs ( ) 同其他的libpcap函数一样有一个errbuf参数, 当有异常情况发生时,这个参数会被pcap填充为某个特定错误字串。程序功能示意如下:# inelude pcap. hvo id m ain ( )P cap _if_ t * alldevs

22、; : / /用于存储网卡信息Char errbuf PCAP _ERRBuF _SIZE ; / /用于存储错误信息if( pcap_findalldevs (& alldevs, errbuf) = = - 1 )/ /这个API用来获得本机网卡列表fprintf ( stderr, Error in Pcap _ findalldevs: % s n , errbuf) ;ex it( l) ;pcap_freealldevs ( alldevs ) ; / /最后用pcap_ free􀀁alldevs ( ) 释放内存资源获得网卡的信息后就可以按数据捕获的要求打开网卡

23、。但是 大部分的包捕获程序都将混杂模式设为默认。数据包的过滤通过设置数据流过滤规则来实现,数据包过滤处理时嗅探技术中的难点和重点,WinPcap提供了最强大的数据流过滤引擎。它才用了一种高效的方法来捕获网络数据流的某些数据且常常和系统的捕获机制相集成。过滤数据的函数定 UDP的起始位置,就可以解析出原端口和目的端口。数据包捕获流程图如图1-1所示: 图1-1第二章 详细分析1 嗅探器设计需要包含的头文件有:#include /*winsock2.h和windows.h是windows socket的头文件,系统定义的*/ #include /*windows.h默认包含了winsock.h,并

24、且他们的顺序不能颠倒,否则会出错*/#include #include #include /*目录控制子程序,把相对路径名转换为绝对路径名*/#pragma comment(lib,ws2_32.lib) /*链接API相关连的Ws2_32.lib静态库,lib制定注释类型*/2 Ip数据报头的结构体:struct ipheader unsigned char ip_hl:4; /*header length(报头长度)*/ unsigned char ip_v:4; /*version(版本)*/ unsigned char ip_tos; /*type os service服务类型*/ u

25、nsigned short int ip_len; /*total length (总长度)*/ unsigned short int ip_id; /*identification (标识符)*/ unsigned short int ip_off; /*fragment offset field(段移位域)*/ unsigned char ip_ttl; /*time to live (生存时间)*/ unsigned char ip_p; /*protocol(协议)*/ unsigned short int ip_sum; /*checksum(校验和)*/ unsigned int

26、ip_src; /*source address(源地址)*/ unsigned int ip_dst; /*destination address(目的地址)*/ /* total ip header length: 20 bytes (=160 bits) */ 3 Tcp报头结构体:typedef struct tcpheader unsigned short int sport; /*source port (源端口号)*/ unsigned short int dport; /*destination port(目的端口号)*/ unsigned int th_seq; /*sequ

27、ence number(包的序列号)*/ unsigned int th_ack; /*acknowledgement number(确认应答号)*/ unsigned char th_x:4; /*unused(未使用)*/ unsigned char th_off:4; /*data offset(数据偏移量)*/ unsigned char Flags; /*标志全*/ unsigned short int th_win; /*windows(窗口)*/ unsigned short int th_sum; /*checksum(校验和)*/ unsigned short int th_

28、urp; /*urgent pointer(紧急指针)*/TCP_HDR;4 Udp报头结构体:typedef struct udphdr unsigned short sport; /*source port(源端口号)*/ unsigned short dport; /*destination port(目的端口号)*/ unsigned short len; /*udp length(udp长度)*/ unsigned short cksum; /*udp checksum(udp校验和)*/UDP_HDR;5 变量:SOCKET sock; /*进行网络通信的套接字*/ SOCKET

29、socket( int af, int type, int protocol );应用程序调用socket函数来创建一个能够进行网络通信的套接字。*第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;第三个参数指定应用程序所使用的通信协议。该函数如果调用成功就返回新创建的套接字的描述符,如果失败就返回INVALID_SOCKET。套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结

30、构的对应关系。该表中有一个字段存放新创建的套接字的描述符,另一个字段存放套接字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据结构都是在操作系统的内核缓冲里。 WSADATA wsd;存储被WSAstartup函数调用后返回的Windowssockets数据 ,即存放windows socket初始化信息 DWORD dwBytesRet; 32bit的无符号整数 unsigned int optval = 1; unsigned char *dataudp,*datatcp; int i,pCount=0,lentcp, lenudp; SOCKADDR_IN sa,saSource, saDest;用来指定ip地址

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2