基于Raw Socket技术的改进Sniffer

来源 :计算机时代 | 被引量 : 0次 | 上传用户:tonybenben
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:阐述了在共享式以太网中用Visual c++6.0实现的基于原始套接字技术的改进网络嗅探器实现。在设计上,除了捕获数据包以外,还进一步解析出应用层协议,运用模式匹配的KMP算法截获相关的数据信息,并保存到本机文件中。
  关键词:共享式以太网;Visual C++6.0;原始套接字;网络嗅探器;KMP算法
  
  0 引言
  
  随着计算机和网络的普及,单独工作、不需要与其他用户交互的应用程序越来越少了。展望未来的IT产业,网络将成为核心。而数据安全作为网络中非常重要的一部分将越来越受到网络设计人员的重视。本文就数据信息的监控方面作一些探讨。
  
  1 Sniffer的设计原理
  
  1.1原始套接字(Raw Socket)
  套接字是一种很常用的网络编程接口,应用程序可以用它进行网络通信而不需要知道底层的细节。Raw Socket是允许访问底层传输协议的一种套接字类型。原始套接字有两种类型,第一种是在IP头中使用预定义的协议,如ICMP;第二种是在IP头中使用自定义的协议。Raw Socket提供管理下层传输的能力,所以它既可以用来进行网络安全维护,也可能成为黑客窃取信息的有效手段。
  
  1.2网络嗅探器(Sniffer)
  网络嗅探器是一种常用的收集有用数据的工具,它在网络安全方面扮演了很重要的角色。使用这种工具,可以监视网络的状态、数据流动情况以及网络上传输的信息。因特网安全系统公司ISS给Sniffer下的定义为:Sniffer是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。Sniffer只能抓取同一个物理网段内的包,就是说,Sniffer和被监听的目标中间不能有路由或其他屏蔽广播包的设备。这一点很重要。
  
  1.3设计原理分析
  运行Sniffer的主机要实现网络监听必须满足两个条件:
  其一,该主机的网卡必须工作在混杂模式下。通常的套接字程序只能响应与自己MAC地址相匹配的,或是以广播形式发出的数据帧,对于其他形式的数据帧网络接口采取的动作就是直接丢弃。为了使网卡接收所有经过它的数据包,要将其设置为混杂模式。在用户模式下,对网卡混杂模式的设置是通过原始套接字来实现的。创建原始套接字之后,将它绑定到一个明确的本地地址,然后向套接字发送SIO_RCVALL控制命令,让它接收所有的IP包,这样网卡便进入混杂模式了。
  其二,传输的数据包能够到达该主机。将以太网内主机连在一起的设备主要有Hub和Switch。Hub是物理层设备,它仅是简单地将收到的数据广播到各个物理网线的接口,而不管这个数据包的目的MAC地址是什么。这样的以太网称之为共享式以太网。在共享式以太网中,只要将网卡设置为混杂模式就可以捕获到经过本地网络地所有数据包了。Switch是数据链路层设备,它收到数据包后会检查数据包的目的MAC地址,然后将该数据包发送到此MAC地址对应的网卡上,其他主机是不会收到的。这样的以太网称之为交互式以太网。这时,如果想收到其他机器数据包的话,就要用到ARP欺骗技术。而这项技术涉及面很广,不属于本文所要讨论的范围。本文所要做的是在共享式以太网中实现网络监听。
  
  2 实现技术的程序设计
  
  2.1程序的总体设计
  程序的设计思想:—般的sniffer设计主要是捕获经过本机的IP包,并进行解包,取出封包中的协议头,源地址和目的地址等信息,并未捕获所传输的真正数据信息。而本程序设计的目的就是能根据用户所感兴趣的某些关键字对某个应用层的协议(如:HTTP、FTP、SMTP等)进行解析,取出用户所感兴趣的信息,并保存到本地机器上。因此本程序所要进行的处理主要有三个:
  (1)首先创建原始套接字,将它绑定到一个明确的本地地址,然后设置SIO_RcvALL控制代码,最后进入无限循环,不断调用recv函数接收经过本地网卡的IP数据包;
  (2)根据接收到的IP包,过滤出用户感兴趣的应用层协议,取出其中的数据信息;
  (3)判断是否有用户感兴趣的信息,如果有,则存储在某个文件中。
  
  2.2监听程序的分析
  在visual c++6.O中用winsock API函数实现网络监听功能的步骤是比较固定的。图1所示的流程图是实现上述功能1的主要步骤。该流程图基本上描述了监听程序的实现过程,所以本文就省略了具体的实现代码。
  


  图1 网络嗅探器通信流程
  
  2.3协议解析函数的分析
  void DecodePacket(char*pData)函数的主要功能就是根据用户所关心的协议类型解析出相应的数据包,其中pData参数表示所接收到的IP数据包。
  以下是关键代码描述:
  //IPHeader是一个结构体,描述了lP的头结构,下面的
  TCPHeader类似
  IPHeader*plPHdr=(IPHeader*)pData:
  //获得IP的头部长度,以便可以从JP数据包中取出TCP封包
  jnt nHeaderLen=(plPHdr->iphVerLen & Oxf)*sizeof(ULONG):
  //根据IP报头的协议部分判断出上层是什么协议
  switch(plPHdr->ipProtoc01)
  { case IPPROTO TCP://这里只以TCP为例,其他协议的实现
  类似
  //取出TCP封包,以做进一步解析
  {TCPHeader*pTCPHdr=(TCPHeader)(pData+nHeaderLen):
  //根据端口号判断应用层协议类型
  switch(::ntohs(pTCPHdr->destinationPort))
  { case 80://这里只以HTTP协议为例,其他协议的实现类似
  //Checklnf0函数是用于搜索关键字的,主要用了模式匹配
  的KMP算法
  CheckInfo((char*)pTCPHdr+sizeof(TCPHeader),
  szSourcelP,szDestlP):
  ……∥其他端口号的操作
  }
  }
  }
  
  2.4搜索关键字函数的分析
  该函数的形参分别为应用层数据的封包,源IP地址,目标IP地址,当封包中有和关键字相匹配的信息时,就将上述三个参数的信息写入指定的文件中。而对封包信息进行检查主要是运用了模式匹配的KMP算法,下面是一些主要的实现代码。
  void CheckInfo(char*pData,char*szSourceIP,charszDestlP)
  {//szDest为需要监视的关键字,pData为在网络上传输的信息
  int nDestLen=strlen(szDest,):int nSourceLen=strlen(pData);
  //初始化源串和关键字比较的位置
  int nSourcePos=0:Int nDestPos=0:
  while(nSourcePos  {if(nDestPos==0llpData[nSourcePos]==szDest[nDestPos])
  {++nSourcePos;++nDestPos;)
  Else
  //当匹配失败时,源串下次比较的位置不变,而关键字下次要
  比较的位置则由next
  //数组中对应的数值来决定。next值表达的就是T关键字自
  身部分匹配的性质。
  //这里省略了next数组的实现,其实现类似与本函数的实现。
  {nDestPos=next[nDestPos.1:}
  }
  if(nDestPos>=nDestLen)
  {……}//匹配成功,将所获得的数据信息写入到本地文件中
  return 0:
  }
  
  3 结束语
  
  互联网上大量使用的许多协议(如:HTTP、FTP、SMTP等)都是不加密的,本文正是基于这样的一个事实,利用一些相关的技术实现对网络信息的监视。在网络安全非常重要的今天,网络监听软件所扮演的角色越来越不容忽视。
  sniffcr既可以作为网络故障的诊断工具,也可以被黑客作为嗅探和监听网络的工具。所以,sniffer技术是一把双刃剑,在了解了它的特性的基础上,利用好它,可以给我们带来方便。
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘 要:随着OA系统的发展,在进行OA系统设计时如何优化工作流程的设计显得越来越重要。根据OA系统的功能,文章提出了一种基于工作流管理的OA系统核心业务流程模型,并以实际系统为例,对模型中的核心业务流程给出了详细的设计与实现。  关键词:办公自动化;核心业务;流程;模型;实现
期刊
摘 要:为了解决设备重启后的重新设置问题,提出了一种实现设备控制设置的存储和回调功能的方法。该方法采用VC++中的ADO数据库编程技术,将已发送的设备控制命令保存在数据源文件中,然后根据需要进行存取,实践证明,该方法简单、灵活,对设备的控制更加方便,提高了工作效率。  关键词:串口;数据库;控制命令;设备控制
期刊
摘 要:对Microsoft Speech SDK 5.1语音控制编程接口SAPI进行了分析,详细描述用C#语言结合这些接口开发语音应用程序的流程步骤,并最终以实例程序展示了共享型语音控制程序的开发流程。  关键词:Microsoft Speech SDK;语音合成;语音识别;C#;COM
期刊
摘 要:从系统的概述、结构、工作层次、软硬件支持、功能、程序设计事项方面对基于Dialogic电话卡、具有语音合成与语音识别功能的办公自动化系统进行了详细描述,并给出了测试结果与尚待解决的问题。  关键词:办公自动化系统;语音合成;语音识别;Dialogic电话语音卡
期刊
摘 要:传统的异常处理代码存在许多问题,尤其是代码不具有模块性,异常代码的维护很困难,面向方面编程(AOP)是一种新的编程技术,它弥补了面向对象编程(OOP)在跨越模块行为上的不足,利用AOP能够很好地分离出“异常处理”这一横切关注点,模块化构建松散耦合的系统-文章研究了在异常处理方面的通用策略和AOP在异常处理方面的应用,并给出了基于JBoss AOP的具体实现:该框架简单灵活,实用。  关键
期刊
摘 要:交又查询是结构化查询的一种,它将数据表通过字段的内容进行归类,形成行、列,重新组成新的表。MicrosonAccess作为一个小型关系型数据库管理工具,采用了特定的语法实现了快速、易用的交叉查询,针对这一语法,文章以实例的方式简要叙述了多种情况下交又查询的实现过程、讨论了使用Access进行交叉查询需要掌握的技巧,并对实际应用过程中容易碰到的问题作了分析,提出了相应解决办法。  关键词:
期刊
摘 要:基于Windows平台下.Net Framework中GDI+二维图形类库,以路径(GraphicsPath)表示图元形状,用仿射变换矩阵的乘法进行图元的连续变换,推导出图元不失真连续变换的条件,并应用图元变换的矩形区域归整化,解决了文本图元变换时字体放缩的难题。  关键词:Net;GDI+;图元变换;路径;矩阵;不失真;文本变换
期刊
摘 要:叙述了如何利用虚拟现实建模语言X3D语法,采用变通的方式来模拟面向对象编程的方法:借助X3D中的原型(PROTO)节点和Script节点,实现了面向对象编程中的如数据封装、继承等功能特性,并给出了相应的实例。  关键词:X3D;面向对象;原型;节点
期刊
摘要:利用Eclipse插件的可扩展机制开发了JTang-Eclipse插件。JTang-Eclipse插件是一个将JTang服务器集成到Eclipse上的工具,遵循Eclipse插件开发平台提供的框架,支持服务器生命周期管理,可以在JTang上部署J2EE archive包,并提供打包、部署描述符自动生成和JSP编译等辅助J2EE开发的功能。  关键词:Eclipse;插件;J2EE;PDE;A
期刊
摘要:对于一些大型的复杂网络系统,利用传统的集中式系统监控模型进行监控和故障诊断是困难的。文章给出了一种将移动Agent技术用于系统监控的分布式系统监控模型。利用这种系统监控模型可以减少网络数据流量,缩短系统监控与故障诊断时间。  关键词:分布式;移动Agent;系统监控;监控模型    0 引言    在现有的集中式系统监控体系中,客户端与服务器之间传递着大量的数据,网络流量很大,增加了网络拥塞
期刊