网络抓包与流量在线分析系统的设计与实现-基于libpcap在MacOS上实现 记录这愉快(DT)的一周

本文档介绍了如何在MacOS上使用libpcap库设计一个网络流量分析系统,包括实时抓包、协议分析、数据流存储和统计功能。系统能展示TCP三次握手过程,并通过Hash链表存储网络连接。实验环境涉及MACOS、C语言和libpcap库,详细阐述了libpcap的安装配置以及源代码实现。
摘要由CSDN通过智能技术生成

网络抓包与流量在线分析系统的设计与实现-基于libpcap在MacOS上实现 记录这愉快(DT)的一周

要求:

基于LINUX系统设计并实现一个网络流量的分析系统。该系统具有以下功能:(1)实时抓取网络数据。(2)网络协议分析与显示。(3)将网络数据包聚合成数据流,以源IP、目的IP、源端口、目的端口及协议等五元组的形式存储。(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。在这些统计数据的基础上分析不同网络应用的流量特征。

关键词:linux,libpcap,流量分析,网络抓包,协议分析,哈希链表,文件操作,C语言

功能

(1)能够实时抓取网络中的数据包。并实时显示在程序界面上。用户可自定义过滤条件以抓取所需要的数据包。
(2)分析各个网络协议格式,能够显示各协议字段的实际意义。例如,能够通过该程序反映TCP三次握手的实现过程。
(3)采用Hash链表的形式将网络数据以连接(双向流)的形式存储。
(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。例如,抓取一段时间(如30分钟)的网络流量,将该段时间以固定时长(如1分钟)为单位分成若干个时间片,计算网络连接在每一个时间片内的相关统计量。并在上述统计数据的基础上分析不同应用如WEB、DNS、在线视频等服务的流量特征。注意,可根据实际的流量分析需要自己定义相关的统计量。

实验环境

硬件设备:
(1)MAC笔记本
软件设备:
(2)MACOS(UNIX内核)
(3)网络数据包捕获函数包,Linux平台下为libpcap
(4)编程语言选用C,IDE使用Xcode
实验环境的配置:
Lipcap 下载地址为:http://www.tcpdump.org/release/libpcap-1.7.3.tar.gz
libpcap(Packet Capture library)即数据包捕获函数库。该库提供的C函数接口可用于需要捕获经过网络接口(只要经过该接口,目标地址不一定为本机)数据包的系统开发上。由 Berkeley大学Lawrence Berkeley National Laboratory研究院的Van Jacobson、Craig Leres和Steven McCanne编写。该函数库支持Linux、Solaris和*BSD系统平台。libpcap主要由两部份组成:网络分接头(Network Tap)和数据过滤器(Packet Filter)。
lipcap的安装过程:
1)tar zxvf libpcap-1.7.3.tar.gz 解压文件,并将其放入自定义的安装目录。
2)打开网址:flex.sourceforge.net/ 下载 flex-2.5.35.tar.gz (1.40MB) 软件包,通过 tar zxvf flex-2.5.35.tar.gz 解压文件,并将其放入上述自定义的安装目录中。
注:如果没有编译安装此文件,在编译安装libpcap时,可能会出现 “configure: error: Your operating system’s lex is insufficient to compile libpcap.”的错误提示。
3)打开网址:ftp.gnu.org/gnu/bison/ 下载 bison-2.4.1.tar.gz (1.9MB) 软件包,通过 tar zxvf bison-2.4.1.tar.gz 解压文件,并将其放入上述自定义的安装目录中。
如果没有编译安装此文件,在编译安装libpcap时,可能会出现 “configure: WARNING: don’t have both flex and bison; reverting to lex/yacc checking for capable lex… insufficient” 的错误提示。
4)打开网址:ftp.gnu.org/gnu/m4/ 下载 m4-1.4.13.tar.gz (1.2MB)软件包,通过 tar zxvf m4-1.4.13.tar.gz 解压文件,并将其放入上述自定义的安装目录中。
注:如果没有编译安装此文件,在编译安装bison-2.4.1时,就会出现 “configure: error: GNU M4 1.4 is required”的错误提示。
5)依次进入目录m4-1.4.13,bison-2.4.1,flex-2.5.35,libpcap-1.0.0 并执行以下命令:
./configure
make
make instal
(备注:使用linux或unix系统的需要进入终端用shell指令安装,Xcode中使用libpcap将其当作第三方函数库使用时,需要手动点击蓝色的工程文件,在右边的BuildPhase中LinkBinaryWithLibraries中手动添加libpcap的函数库,并且c中支持的一些基于win平台的函数和头文件在MACOS中有所差异,如#include <malloc.h>需改成#include <mm_malloc.h>,还有一些细节需要自己发现)

源代码

(分为头文件与主c文件两部分)
/main.h 包括网络抓包与流量分析/
#include <stdio.h>
#include <mm_malloc.h>
#include <sys/malloc.h>
#include <time.h>
#include <string.h>
#include <pcap.h>
#include “protocol.h”
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<unistd.h>

typedef struct _argument
{
pcap_t *handle;
int timeLen;
}argument;

void *thread_clock(void argv)
{
pcap_t handle = ((argument)argv)->handle;
int timeLen = ((argument
)argv)->timeLen; // set time
sleep(timeLen);
pcap_breakloop(handle);
return 2;
}

void cb_getPacket(u_char *dumpfile, const struct pcap_pkthdr *pkthdr, const u_char *packet)
{
// ip_header seg_ip = (ip_header)(package + ETHER_LEN);
pcap_dump(dumpfile, pkthdr, packet);

static int id = 0;
printf(".  ");
if(++id % 30 == 0)
{
    printf("\n");
}

}

//timeval结构
typedef struct _shh_timeval{
int tv_sec; /* seconds 1900之后的秒数 /
int tv_usec; /
and microseconds */
}shh_timeval;

// pcap_next()方法执行后,pcap_pkthdr类型的指针指向抓包的信息
typedef struct _shh_pkthdr {
shh_timeval ts; /* time stamp 时间 /
bpf_u_int32 caplen; /
length of portion present 包的数据长度?? /
bpf_u_int32 len; /
length this packet (off wire) 包的实际长度 */
}shh_pkthdr;

typedef struct _net5set
{
u_int sip;
u_short sport;
u_int dip;
u_short dport;
u_char protocol;
}net5set;

typedef struct _net_link_node
{

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值