Libnids入门

Libnids快速入门
概述
Libnids概述
Libnids(Library Network Intrusion Detection System)是网络入侵检测开发的专业编程接口,实现了网络入侵检测系统的基本框架,提供了一些基本的功能。Libnids是基于Libpcap和Libnet而开发的,其主要功能包括捕获网络数据包、IP碎片重组、TCP数据流重组以及端口扫面攻击检测和异常数据包检测等。
Libnids的安装
因为Libnids必须支持库Libpcap和Libnet,所以在安装Libnids 之前需要先安装Libpcap和Libnet。
在Linux下安装Libnids的步骤:
(1)安装Libpcap开发包:我们安装的版本是libpcap-0.8.
tar –xzvf libpcap-0.8.
./configure
make
make install
(2)安装Libnet开发包:我们安装的版本是libnet-1.1.2.
tar –xzvf libnet-1.1.2.
./configure
make
make install
(3)安装Libnids开发包:我们安装的版本是libnids-1.
tar –xzvf libnids.1.
./configure
make
make install
的数据结构
Libnids的数据结构
Libnids的状态主要有如下6种:
#define NIDS_JUST_EST 1(表示TCP连接建立,在此状态下就可以决定是否对此TCP连接进行数据分析,可以决定是否捕获TCP客户端接收的数据、TCP服务器端接收的数据、TCP客户端接收的紧急数据或者TCP服务器端接收的紧急数据);
#define NIDS_DATA 2(表示接受数据,在这个状态下可以判断是否有新的诗句到达,如果有就可以把数据存起来,可以在这个状态之中来分析TCP传输数据,此数据就存储在half_stream数据结构的缓存之中);
#define NIDS_CLOSE 3(表示TCP连接正常关闭);
#define NIDS_RESET 4(表示TCP连接被重置关闭);
#define NIDS_TIMED_OUT 5(表示由于超时TCP连接被关闭);
#define NIDS_EXITING 6(表示Libnids正在推出,在这个状态下可以最后一次使用存储在half_stream数据结构中的缓存数据);
tuple4的数据结构:
struct tuple4
{//下面以TCP连接为例
u_short source;//表示源IP地址的端口号
u_short dest;//表示目的IP地址的端口号
u_int saddr;//表示一个TCP连接的一端IP地址,称为源IP地址
u_int daddr;// 表示一个TCP连接的另一端IP地址,称为目的IP地址
}该数据结构描述的是一个地址端口对,表示发送方IP和端口以及接收方IP和端口。
斯蒂文斯皮尔伯格
half_stream结构
该结构用来描述在TCP连接中一端的所有信息(可以是客户端也可以是服务器端)
struct half_stream
{char state;//表示套接字的状态,即TCP连接状态
char collect;//用来表示有数据到达,此数据存放在data成员中,当此数据可以忽略时就不需要存储
char collect_urg;//表示有紧急数据到达,此数据存在urgdata中 char *data;//存储正常接收到的数据
int offset;//存储在data中数据在第一个字节的偏移量
int count;//从TCP连接开始已经存储在data中的数据的字节数 int count_new;//有多少新的数据存储到data中
u_char urgdata;//存储紧急数据
u_char count_new_urg;//有新的紧急数据到达
……
}
tcp_stream的结构
该结构中成员client表示客户端信息,成员server表示服务器端信息,都是half_stream类型的,所以tcp_stream数据结构描述了一个完整的TCP连接的所有信息。
tcp_stream
{struct tuple4 addr;
char nids_state;
卡玛斯大货车
struct lurker_nods *listeners;
struct half_stream client;
struct half_stream server;
struct tcp_stream *next_node;
struct tcp_strem *prev_nods;
int hash_index;
struct tcp_stream *next_time;
struct tcp_stream *prev_time;
int read;
struct tcp_stream *next_free;
};
nids_prm结构描述了Libnids的一些全局参数信息,利用它可以对Libnids的一些环境参数进行设置。
nids_chksum_ctl数据结构描述的是计算校验和
struct nids_chksum_ctl
{u_int netaddr;//地址
u_int mask;//掩码财政部长
u_int action;//动作,如果是NIDS_DO_CHKSUM,则表示计算校验和;
如果是NIDS_DONT_CHKSUM,则表示不计算校验和 u_int reserved;人脸定位
}
的常用函数
Libnids的常用函数
1.基本函数:
(1)int nids_init(void);是对Libnids进行初始化,主要内容包括打开网络接口、打开文件、编译过滤规则、设置过滤规则、判断网络连接层类型、进行必要的初始化工作。龚升
(2)void nids_run(void);试运行Libnids,进入循环捕获数据包状态。实际上是调用Libpcap函数pcap_loop()来循环捕获数据包。
(3)int nids_getfd(void);获得文件描述符号。
(4)int nids_dispatch(int cnt);调用Libpcap中的捕获数据包函数pcap_dispatch()。
(5)int nids_next(void);调用Libpcap中捕获数据包函数pcap_next()。
(6)void nids_register_chksum_ctl(struct nids_chksum_ctl *ptr,int nr);根据数据结构中的nids_chksum_ctl中的action 进行决定是否计算校验和。
山西农业大学学报2.IP碎片函数

本文发布于:2024-09-23 09:28:18,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/214738.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:表示   数据   连接   安装
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议