网络嗅探器的设计与实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

网络攻防技术实验报告嗅探器的设计与实现姓名:张梦学号:11054106一、嗅探器的设计原理嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即可以是发给它的也可以是发往别处的。显然,要达到此目的就不能再让网卡按通常的正常模式工作,而必须将其设置为混杂模式。二、嗅探器的开发基础1、嗅探器的实现目标(1)实现网络嗅探器的界面。(2)实现抓取数据包的功能。(3)实现暂停抓取数据包功能。(4)实现清空列表功能。2、嗅探器的技术支持简介(1)TCP/IP协议分析TCP/IP是供已连接因特网的计算机进行通信的通信协议。TCP/IP定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。TCP/IP是一个四层的分层体系结构。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。网络上的网关计算机根据信息的地址来进行路由选择。即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。TCP/IP使用客户端/服务器模式进行通信。TCP/IP通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。TCP/IP与上层应用程序之间可以说是“没有国籍的”,因为每个客户请求都被看做是与上一个请求无关的。正是它们之间的“无国籍的”释放了网络路径,才是每个人都可以连续不断的使用网络。许多用户熟悉使用TCP/IP协议的高层应用协议。(2)数据包简介包是TCP/IP协议通信中的基本的数据单位之一,一般也叫数据包。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。“包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是可以感知到数据包的存在的。通过数据包捕获软件,也可以将数据包捕获并加以分析。就是用网络嗅探器捕获数据包,可以查看捕获到的数据包的MAC地址、IP地址、协议类型端口号等细节。通过分析这些数据,网管员就可以知道网络中到底有什么样的数据包在活动了。数据包的结构非常复杂,不是三言两语能够说清的,在这里主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。比如说当你上网打开网页,这个简单的动作,就是你先发送数据包给网站,它接收到了之后,根据你发送的数据包的IP地址,返回给你网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。理解数据包,对于网络管理的网络安全具有至关重要的意义。(3)C++语言C++是一种编程语言,可用于编辑可执行程序,支持内嵌汇编,有C++/CLI(托管代码)和C++ISO/IEC(本机代码)两种标准。三、嗅探器开发的意义本次设计只是对抓取到的本机在网络中的通信数据,比如说协议类型、源、目的地址和端口、数据包的大小等加以分析!作为从事网络技术方面的人员来说,需要有效的利用、防范嗅探器,就要深入的学习、分析嗅探技术。最为重要的是,对嗅探器的学习使我们对网络通信、数据传输和网络信息安全等有了更深的认识!四、网络嗅探器源代码1、网络嗅探器源代码及其说明#includewinsock2.h/*windowssocket的头文件,系统定义的*/#includewindows.h#includews2tcpip.h#includestdio.h#includestdlib.h#pragmacomment(lib,ws2_32.lib)/*链接API相关连的Ws2_32.lib静态库*/#defineMAX_HOSTNAME_LAN255#defineSIO_RCVALL_WSAIOW(IOC_VENDOR,1)#defineMAX_ADDR_LEN16structipheader{unsignedcharip_hl:4;/*headerlength(报头长度)*/unsignedcharip_v:4;/*version(版本)*/unsignedcharip_tos;/*typeosservice服务类型*/unsignedshortintip_len;/*totallength(总长度)*/unsignedshortintip_id;/*identification(标识符)*/unsignedshortintip_off;/*fragmentoffsetfield(段移位域)*/unsignedcharip_ttl;/*timetolive(生存时间)*/unsignedcharip_p;/*protocol(协议)*/unsignedshortintip_sum;/*checksum(校验和)*/unsignedintip_src;/*sourceaddress(源地址)*/unsignedintip_dst;/*destinationaddress(目的地址)*/};/*totalipheaderlength:20bytes(=160bits)*/typedefstructtcpheader{unsignedshortintsport;/*sourceport(源端口号)*/unsignedshortintdport;/*destinationport(目的端口号)*/unsignedintth_seq;/*sequencenumber(包的序列号)*/unsignedintth_ack;/*acknowledgementnumber(确认应答号)*/unsignedcharth_x:4;/*unused(未使用)*/unsignedcharth_off:4;/*dataoffset(数据偏移量)*/unsignedcharFlags;/*标志全*/unsignedshortintth_win;/*windows(窗口)*/unsignedshortintth_sum;/*checksum(校验和)*/unsignedshortintth_urp;/*urgentpointer(紧急指针)*/}TCP_HDR;typedefstructudphdr{unsignedshortsport;/*sourceport(源端口号)*/unsignedshortdport;/*destinationport(目的端口号)*/unsignedshortlen;/*udplength(udp长度)*/unsignedshortcksum;/*udpchecksum(udp校验和)*/}UDP_HDR;voidmain(){SOCKETsock;WSADATAwsd;DWORDdwBytesRet;unsignedintoptval=1;unsignedchar*dataudp,*datatcp;inti,pCount=0,lentcp,lenudp;SOCKADDR_INsa,saSource,saDest;structhostentFAR*pHostent;charFARname[MAX_HOSTNAME_LAN];charszSourceIP[MAX_ADDR_LEN],szDestIP[MAX_ADDR_LEN],RecvBuf[65535]={0};structudphdr*pUdpheader;structipheader*pIpheader;structtcpheader*pTcpheader;WSAStartup(MAKEWORD(2,1),&wsd);if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==SOCKET_ERROR)exit(1);gethostname(name,MAX_HOSTNAME_LAN);pHostent=gethostbyname(name);sa.sin_family=AF_INET;sa.sin_port=htons(6000);memcpy(&sa.sin_addr.S_un.S_addr,pHostent-h_addr_list[0],pHostent-h_length);bind(sock,(SOCKADDR*)&sa,sizeof(sa));/*bind()设定自己主机的IP地址和端口号*/if((WSAGetLastError())==10013)exit(1);WSAIoctl(sock,SIO_RCVALL,&optval,sizeof(optval),NULL,0,&dwBytesRet,NULL,NULL);pIpheader=(structipheader*)RecvBuf;pTcpheader=(structtcpheader*)(RecvBuf+sizeof(structipheader));pUdpheader=(structudphdr*)(RecvBuf+sizeof(structipheader));while(1){memset(RecvBuf,0,sizeof(RecvBuf));recv(sock,RecvBuf,sizeof(RecvBuf),0);saSource.sin_addr.s_addr=pIpheader-ip_src;strncpy(szSourceIP,inet_ntoa(saSource.sin_addr),MAX_ADDR_LEN);saDest.sin_addr.s_addr=pIpheader-ip_dst;strncpy(szDestIP,inet_ntoa(saDest.sin_addr),MAX_ADDR_LEN);lentcp=(ntohs(pIpheader-ip_len)-(sizeof(structipheader)+sizeof(structtcpheader)));lenudp=(ntohs(pIpheader-ip_len)-(sizeof(structipheader)+sizeof(structudphdr)));if((pIpheader-ip_p)==IPPROTO_TCP&&lentcp!=0){printf(*******************************************\n);pCount++;datatcp=(unsignedchar*)RecvBuf+sizeof(structipheader)+sizeof(structtcpheader);printf(-TCP-\n);printf(\n目的IP地址:%s\n,szDestIP);printf(\n目的端口:%i\n,ntohs(pTcpheader-dport));printf(datatcpaddress-%x\n,datatcp);printf(sizeofipheader-%i\n,sizeof(structipheader));printf(sizeoftcpheader-%i\n,sizeof(structtcphead

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功