基于Linux的数据包捕获模块设计实现

  1、 数据包捕获模块设计流程图

  在数据包捕获程序中,通过设置网卡工作于混杂状态,对网络链路进行监听并收集数据包,从而获得数据包头信息。

  2、数据包捕获模块实现

  该数据包捕获程序用C语言来编写,程序中用到很多Linux网络编程中的函数。

  (1)设置网络接口为混杂模式

  网络接口的混杂模式使得一个网络接口设备从只能读取目标地址为6字节MAC地址的数据包,变为可读取网络广播媒体中的所有数据包。该部分通过两次ioctl函数调用实现:
 
引用:
  ioctl(sock, SIOCGIFFLAGS, &ifr)
  ifr.ifr_flags |= IFF_PROMISC
  ioctl(sock, SIOCGIFFLAGS, &ifr)