网络嗅探器的设计与实现.docx

上传人:b****3 文档编号:11092405 上传时间:2023-05-29 格式:DOCX 页数:11 大小:22.46KB
下载 相关 举报
网络嗅探器的设计与实现.docx_第1页
第1页 / 共11页
网络嗅探器的设计与实现.docx_第2页
第2页 / 共11页
网络嗅探器的设计与实现.docx_第3页
第3页 / 共11页
网络嗅探器的设计与实现.docx_第4页
第4页 / 共11页
网络嗅探器的设计与实现.docx_第5页
第5页 / 共11页
网络嗅探器的设计与实现.docx_第6页
第6页 / 共11页
网络嗅探器的设计与实现.docx_第7页
第7页 / 共11页
网络嗅探器的设计与实现.docx_第8页
第8页 / 共11页
网络嗅探器的设计与实现.docx_第9页
第9页 / 共11页
网络嗅探器的设计与实现.docx_第10页
第10页 / 共11页
网络嗅探器的设计与实现.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

网络嗅探器的设计与实现.docx

《网络嗅探器的设计与实现.docx》由会员分享,可在线阅读,更多相关《网络嗅探器的设计与实现.docx(11页珍藏版)》请在冰点文库上搜索。

网络嗅探器的设计与实现.docx

网络嗅探器的设计与实现

 

题目网络嗅探器的设计与实现

院、系(部)计算机科学与技术学院

专业及班级计科0901班

姓名陈宁

日期2012年4月

 

网络嗅探器的设计与实现

前言

随着网络发展的不断延续,网络应用日益复杂,以满足人们对信息的大量需求,但伴随而来的是,大量网络故障及网络病毒冲击着网络与终端用户,因此对于网络安全管理与网络日常的要求日益加重。

嗅探器有着至关重要的作用。

嗅探器,可以理解为一个安装在计算机上的窃听设备它可以用来窃听计算机在网络上所产生的众多的信息。

嗅探器是利用计算机网络接口截获所需网络内部数据报文的一种工具,它广泛地应用于流量分析、安全监控的实现中。

正文

1)什么是网络嗅探器

网络嗅探器又称为网络监听器,简称为Sniffer子系统,放置于网络节点处,对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用数据的方法,这些数据可以是用户的账号和密码,可以是一些商用机密数据等等。

网络嗅探器是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。

网络嗅探器的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在的问题。

例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器截获网络中的数据包,分析问题的所在。

而嗅探器也可作为攻击工具被黑客所利用为其发动进一步的攻击提供有价值的信息。

2)网络嗅探器的作用

嗅探器是网络的抓包工具,可以对网络中大量数据抓取,从而方便使用者对网络中用户的一些信息进行分析,所以,通常被黑客运用于网络攻击。

我们如果也能掌握网络嗅探器的原理和设计,可以将它运用与网络故障检测、网络状况的监视,还可以加强企业信息安全防护。

3)网络嗅探器的原理

 嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。

但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。

而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即可以是发给它的也可以是发往别处的。

显然,要达到此目的就不能再让网卡按通常的正常模式工作,而必须将其设置为混杂模式。

  具体到编程实现上,这种对网卡混杂模式的设置是通过原始套接字(rawsocket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。

在创建了原始套接字后,需要通过setsockopt()函数来设置IP头操作选项,然后再通过bind()函数将原始套接字绑定到本地网卡。

为了让原始套接字能接受所有的数据,还需要通过ioctlsocket()来进行设置,而且还可以指定是否亲自处理IP头。

至此,实际就可以开始对网络数据包进行嗅探了,对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成。

但是与其他两种套接字不同的是,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有IP头、TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。

通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。

由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。

下面先给出结构.数据包的总体结构:

数据包

IP头TCP头(或其他信息头)数据

数据在从应用层到达传输层时,将添加TCP数据段头,或是UDP数据段头。

其中UDP数据段头比较简单,由一个8字节的头和数据部分组成,具体格式如下:

  16位16位

  源端口目的端口

  UDP长度UDP校验和

而TCP数据头则比较复杂,以20个固定字节开始,在固定头后面还可以有一些长度不固定的可选项,下面给出TCP数据段头的格式组成:

  16位16位

  源端口目的端口

  顺序号

  确认号

  TCP头长(保留)7位URGACKPSHRSTSYNFIN窗口大小

  校验和紧急指针

  可选项(0或更多的32位字)

  数据(可选项)

  对于此TCP数据段头的分析在编程实现中可通过数据结构_TCP来定义:

  typedefstruct_TCP{WORDSrcPort;//源端口

  WORDDstPort;//目的端口

  DWORDSeqNum;//顺序号

  DWORDAckNum;//确认号

  BYTEDataOff;//TCP头长

  BYTEFlags;//标志(URG、ACK等)

  WORDWindow;//窗口大小

  WORDChksum;//校验和

  WORDUrgPtr;//紧急指针

  }TCP;

  typedefTCP*LPTCP;

  typedefTCPUNALIGNED*ULPTCP;

在网络层,还要给TCP数据包添加一个IP数据段头以组成IP数据报。

IP数据头以大端点机次序传送,从左到右,版本字段的高位字节先传输(SPARC是大端点机;Pentium是小端点机)。

如果是小端点机,就要在发送和接收时先行转换然后才能进行传输。

IP数据段头格式如下:

  16位16位

  版本IHL服务类型总长

  标识标志分段偏移

  生命期协议头校验和

  源地址

  目的地址

  选项(0或更多)

  同样,在实际编程中也需要通过一个数据结构来表示此IP数据段头,下面给出此数据结构的定义:

  typedefstruct_IP{

  union{BYTEVersion;//版本

  BYTEHdrLen;//IHL

  };

  BYTEServiceType;//服务类型

  WORDTotalLen;//总长

  WORDID;//标识

  union{WORDFlags;//标志

  WORDFragOff;//分段偏移

  };

  BYTETimeToLive;//生命期

  BYTEProtocol;//协议

  WORDHdrChksum;//头校验和

  DWORDSrcAddr;//源地址

  DWORDDstAddr;//目的地址

  BYTEOptions;//选项

  }IP;

  typedefIP*LPIP;

  typedefIPUNALIGNED*ULPIP;

  在明确了以上几个数据段头的组成结构后,就可以对捕获到的数据包进行分析了。

嗅探器的具体实现

根据前面的设计思路,不难写出网络嗅探器的实现代码,下面就给出一个简单的示例,该示例可以捕获到所有经过本地网卡的数据包,并可从中分析出协议、IP源地址、IP目标地址、TCP源端口号、TCP目标端口号以及数据包长度等信息。

由于前面已经将程序的设计流程讲述的比较清楚了,因此这里就不在赘述了,下面就结合注释对程序的具体是实现进行讲解,同时为程序流程的清晰起见,去掉了错误检查等保护性代码。

主要代码实现清单为:

  //检查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);

  //获取本地IP地址

  pHost=gethostbyname((char*)LocalName));

  //填充SOCKADDR_IN结构

  addr_in.sin_addr=*(in_addr*)pHost->h_addr_list[0];//IP

  addr_in.sin_family=AF_INET;

  addr_in.sin_port=htons(57274);

  //把原始套接字sock绑定到本地网卡地址上

  bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in));

  //dwValue为输入输出参数,为1时执行,0时取消

  DWORDdwValue=1;

  //设置SOCK_RAW为SIO_RCVALL,以便接收所有的IP包。

其中SIO_RCVALL

  //的定义为:

#defineSIO_RCVALL_WSAIOW(IOC_VENDOR,1)

  ioctlsocket(sock,SIO_RCVALL,&dwValue);

  前面的工作基本上都是对原始套接字进行设置,在将原始套接字设置完毕,使其能按预期目的工作时,就可以了。

4)网络嗅探器的设计

在以太网中,信息是以明文的形式在网络上传输[2],当将网络适配器设置为混杂模式时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可捕获任何一个在同一冲突域上传输的数据包。

IEEE802.3标准的以太网采用的是持续CSMA的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。

运用这一原理使信息捕获系统能够拦截我所要的信息,这是捕获数据包的物理基础。

首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包,这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。

这个部分是系统依赖的,在Winpcap的解决方案里它被认为是一个设备驱动,称作NPF(NetgroupPacketFilter)。

Winpcap提供了两个不同的库:

Packet.dll和Wpcap.dll。

Wpcap.dll提供了更加友好、功能更加强大的函数调用。

WinPcap的优势在于提供了一套标准的抓包接口,与libpcap兼容,可使得原来许多UNIX平台下的网络分析工具快速移植过来,便于开发各种网络分析工具,充分考虑了各种性能和效率的优化,包括对于NPF内核层次上的过滤器支持,支持内核态的统计模式,提供了发送数据包的能力。

前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了

一组更强大的与libpcap一致的高层抓包函数库(captureprmiitives)。

这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。

网络嗅探器工作在网络环境的底层,拦截所有正在网络上传送的数据,并且通过相应的解析处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体拓扑布局。

含了相应设备的名称和描述。

取得网卡列表后就

在屏幕上显示出来,如果网卡没有被发现就显示有关错误,pcap_findalldevs()同其他的libpcap函数一样有一个errbuf参数,当有异常情况发生时,这个参数会被pcap填充为某个特定错误字串。

程序功能示意如下:

#ineludepcap.h

voidmain()

{

Pcap_if_t*alldevs;:

//用于存储网卡信息

Charerrbuf[PCAP_ERRBuF_SIZE];//用于存储错误信息

if(pcap_findalldevs(&alldevs,errbuf)==-1)//这个API用来获得本机网卡列表

{

fprintf(stderr,ErrorinPcap_findalldevs:

%s\n,errbuf);

exit(l);

}

••••••

pcap_freealldevs(alldevs);//最后用pcap_free􀀁alldevs()释放内存资源

获得网卡的信息后就可以按数据捕获的要求打开网卡。

但是大部分的包捕获程序都将混杂模式设为默认。

数据包的过滤通过设置数据流过滤规则来实现,数据包过滤处理时嗅探技术中的难点和重点,WinPcap提供了最强大的数据流过滤引擎。

它才用了一种高效的方法来捕获网络数据流的某些数据且常常和系统的捕获机制相集成。

过滤数据的函数定UDP的起始位置,就可以解析出原端口和目的端口。

总结

通过本次课程设计,深入的学习了网络嗅探器的相关知识,包括其工作原理,作用,和设计方法。

网络监听技术作为一种工具,总是扮演着正反两方面的角色。

对于入侵者来说,最喜欢的莫过于用户,通过网络监听可以很容易地获得这些关键信息。

而对于入侵检测和追踪者来说,网络监听技术又能够在与入侵者的斗争中发挥重要的作用。

嗅探器工作的时候就像一部被动声纳,默默的接收看来自网络的各种信息,通过对这些数据的分析,网络管理员可以深入了解网络当前的运行状况,以便找出网络中的漏洞。

在网络安全日益被注意的今天.我们不但要正确使用嗅探器.还要合理防范嗅探器的危害.嗅探器能够造成很大的安全危害,主要是因为它们不容易被发现。

鉴于目前的网络安全现状,我们应该进一步挖掘网络监听技术的细节,从技术基础上掌握先机,才能在与入侵者的斗争中取得胜利。

但是仍然存在一些不足之处,例如:

1.由于时间和所学知识有限,只对数据包作了简单分析,分析内容不是很全面;

2.本论文中的嗅探器适用于基于广播包的网络,而对于诸如交换机这类设备,由于它能够阻止广播,所以就不能够对子网内其他的机器进行监听,若想要对此子网进行监听,就必须处于与此交换机同级的包交换网络中。

通过对该课题的研究,让我对嗅探技术有了进一步的了解,对其两面性在网络中产生的影响有了更深的认识,为了打破以上局限性,还需要结合已学知识对网络嗅探技术方面的知识作进一步的学习。

参考文献

[1]求是科技,王正军.VisualC++6.0程序设计从入门到精通[M].北京:

人民邮电出版社,2006。

[2]郑莉,董渊.C++语言程序设计(第二版)[M].北京:

清华大学出版社,2001。

[3]张仕斌,谭三,易勇,蒋毅.网络安全技术[M].北京:

清华大学出版社,2004。

[4] 刘志祥.Linux系统安全性研究及其新型Sniffer设计与实现[D].南昌:

南昌大学[硕士论文],2005。

[5]李渤.嗅探技术的研究与应用开发[D].北京:

中国地质大学[硕士论文],2005。

[6]刘胜斐.多Agent分布式入侵检测系统中通信机制和数据分析方法研究[D].江苏:

南开大学[硕士论文],2004。

[7]孙晶艳.面向校园网的网络监听技术研究[D].黑龙江:

哈尔滨工业大学[硕士论文]。

 

网络嗅探器的原理与实现

摘要

随着网络技术的发展和网络应用的普及,越来越多的信息资源放在了互联网上,网络的安全性和可靠性显得越发重要。

因此,对于能够分析、诊断网络,测试网络性能与安全性的工具软件的需求也越来越迫切。

网络嗅探器具有两面性,攻击者可以用它来监听网络中数据,达到非法获得信息的目的,网络管理者可以通过使用嗅探器捕获网络中传输的数据包并对其进行分析,分析结果可供网络安全分析之用。

本文对网络嗅探技术进行了简要分析,研究了网络数据包的捕获机制,如winpcap、原始套接字。

文中首先分析了嗅探的原理和危害,并介绍了几种常见的嗅探器,然后研究了入侵检测系统中使用的包捕获技术。

本文利用原始套接字在windows平台下实现了一个网络嗅探器程序,完成了对数据包进行解包、分析数据包的功能。

关键词:

网络嗅探器;数据包捕获;数据包分析;原始套接字

Networksniffer'sprincipleandrealization

Abstract

Alongwiththedevelopmentofnetworktechnologyandpopularizationofthenetworkapplications,moreandmoreoftheinformationresourcesontheInternet,thesafetyandreliabilityofthenetworkisbecomingmoreandmoreimportant.So,tobeabletoanalysisanddiagnosisnetwork,theperformanceofthenetworksecurityandthetesttoolsoftwaredemandismoreandmoreurgent.Networksnifferappliancehastwosides,andattackercanuseittomonitornetworkdata,toachievethepurposeofillegalgaininformation,networkmanagerscanusesniffercapturenetworktransmissioninpacketsandtoanalyzeit,theanalysisresultsfornetworksecurityanalysispurposes.

关闭全屏阅读Inthispaper,thenetworksniffertechnologyarebrieflyanalyzed,andthenetworkpacketstocapturemechanism,suchaswinpcap,originalsocket.Thispaperfirstanalyzestheprincipleandtheharmofsniffer,andintroducesseveralcommonsniffer,andthenstudiedtheintrusiondetectionsystemusedinthepacketcapturetechnology.ByusingtheoriginalsocketinWindowstheworkbenchimplementsanetworksnifferprogram,completionofthepackettounpack,analysisofdatapacketsfunction.

Keywords:

networksniffer;Packetcapture;Packetanalysis;Originalsocket

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

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

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