libpcap简介及网络监测系统


(转:)
开发网络监测系统



正文:
网络的应用越来越广泛,随之而来的网络管理也越来越复杂,仅仅依靠手工及系统提供的有限的工具来实现网络的管理是不够的。因此,开发网络管理工具十分必要。 

   网络监测系统主要是为网络管理提供所需的一些数据,它是维护网络的重要工具。网络监测系统在活动监测方面的主要应用是记录网络中的所有活动,这点对于检 测网络入侵是十分有用的。因为,现在黑客对于各个系统的审计机制都十分熟悉,一般在入侵系统之后都要修改系统的审计日志,从而把自己的入侵行为隐藏起来, 所以开发自己的网络监测系统来监测自己网络所有的活动非常必要。 

  本文介绍网络监测的原理及利用libpcab.a来开发网络监测系统的主要函数,并给出一个简单的实例。 

  网络监测系统的原理 

  网络监测系统就是用来记录网络上发生的所有事情,并对它们进行分析处理的系统。现以Ethernet为例介绍其原理。 



   图1 Ethernet网络拓扑图 

  Ethernet的工作原理 

   Ethernet开始是Xerox公司开发的,是一种基于CSMA/CD(Carrier Sense Multi- Access/Collission Detection)的网络。它是一种总线结构的网络,拓扑结构如图1所示。一个站点(例如H1)要传数据时,它首 先监听信道(总线),如果信道不忙则把数据向信道(总线)发出,此时该数据独占信道。网络上其它的站点(例如H2、Hn等)都能接收到该数据。站点在接到 数据后的一般处理是:把数据要传送到的目的地址和自己的地址进行比较,如果数据是发给本站点的则接收该数据,并把该数据向上层的系统调用递交;如果数据不 是发给本站点的则把它抛弃。 

  监测系统的原理 

  上面讲的是Ethernet的一般工作原理,而在实际的系统上,数据收发是由NIC(Network InterfaceCard)即网卡来完成的,网卡还提供了其它的一些服务。 



   图2网络监测系统原理图 

  网卡一般有四种模式: 

  ◆广播方式:该模式下的网卡能够接收网络中的广播信息。 

  ◆组播方式:设置在该模式下的网卡能够接收组播数据。 

  ◆直接方式:在这种模式下,只有目的网卡才能接收该数据。 

  ◆混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。 

  网络监测系统就是把网卡设在混杂模式下工作的,在混杂模式下网络监测系统能够看到网络中的一切数据。它的原理图如图2所示。从图中我们可以看出,网络监测系统由三部分组成,即网络接口卡(NIC)、数据捕获系统及数据分析和记录系统。 

   

   网络接口卡(NIC)向上提供网络中的数据,数据捕获系统完成从网络接口中读出数据并向上层递交。数据捕获系统是开发网络监测系统的难点,它因各个不同 的操作系统而不同,而且操作比较复杂。本文主要论述该子系统的开发。数据分析和记录子系统的主要任务是分析数据捕获子系统中传来的数据并作好记录,它记录 的内容主要有数据的源地址、数据的协议和数据所申请的服务等。 

  UNIX系统下开发网络监测系统 

  UNIX系统 下数据捕获子系统是利用libpcap.a来开发的。libpcap.a是一个通用UNIX系统网络接口程序包,目前支持的操作系统有BSDUNIX、 SOLARIS系统、SUNOS、LINUX及HP-UX等系统。该函数库目前只支持所有的网络接口的读数据的操作。系统开发中我们用到以下几个函数: 

  1、pcap-lookupdev(),功能:找到一个非回送的活动的网络接口,并返回其对应的文件名。 

  2、pcap-lookupnet(),功能:获取指定的网络接口的网络号和子网掩码。 

  3、pcap-open-live(),功能:打开网络接口,并根据用户的输入参数对网络接口进行设置。 

  4、pcap-compile(),功能:将描述性的过滤规则转换成系统识别的代码。 

  举例说明 

  在UNIX系统下对文件和设备的操作都是按照打开、使用然后关闭的过程。利用libpcap.a进行开发也遵循这样的过程。那么它的过程就是打开、使用和关闭网络接口。 

  操作的过程是打开设备,进行设置,设置后进行数据的接收,然后对接收到的数据进行分析处理。一个简单的例子如下,它的功能是对出入本网络的数据的源和目的地址进行登记。该程序在Solaris 2.7系统上编译运行成功。 

  #include〈pcap.h〉 

  #include〈stdio.h〉 

  #include〈sys/socket.h〉 

  #include 〈netinet/in_systm.h〉 

  #include〈netinet/in.h〉 

  #include 〈sys/ethernet.h〉 

  #include〈netinet/ip.h〉 



  main() 

  { 

   char *cmd=""; 

   char errbuf[1024]; 

   int snaplen=1024; 

   struct pcap_pkthdr hdr; 

   bpf_u_int32 localnet,netmask; /* the netnumber and the netmask.*/ 

   struct bpf_program fcode; 

   struct ip *iphdr; 

   struct ether_header *e_header; 

   char *string=NULL; 

   pcap_t *pd; 

   char *device; 

   device=pcap_lookupdev(errbuf); 

   pd=pcap_open_live(device,snaplen,1,500,errbuf); 

   pcap_lookupnet(device,&localnet,&netmask,errbuf); 

   pcap_compile(pd, &fcode, cmd,0, netmask); 

   pcap_setfilter(pd,&fcode); 

   while(1) 

   { 

   string =(char *)pcap_next(pd,&hdr); 

   e_header=(struct ether_header *)string; 

   if(ntohs(e_header-〉ether_type)!=ETHERTYPE_IP) continue; 

   iphdr=(struct ip *)(string+sizeof(struct ether_header)); 

   printf("SOURCE:%s/n",inet_ntoa(iphdr-〉ip_src)); 

   printf("DESTINATION :%s /n",inet_ntoa(iphdr-〉ip_dst)); 

   } /*the end of while .*/ 

  } /* the end of main .*/ 

   

  在网络应用日益广泛的今天,网络的管理越来越复杂,只有加强对网络的监测,才能更有效地对网络进行管理。网络监测是对网络进行管理的辅助工具,也是防止黑客修改系统日志的有力手段,同时它还是基于行为分析的入侵检测工具的数据来源,是分析的基础。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值