网络入侵检测系统(NIDS)函数接口说明


基本函数

1、nids_register_chksum_ctl

struct nids_chksum_ctl {

u_intnetaddr;

u_int mask;

u_intaction;

u_intreserved;

};

void nids_register_chksum_ctl(struct nids_chksum_ctl*ptr,intnr)

该函数没有返回值。

参数1:ptr 表示结构体nids_chksum_ctl的列表

参数2:nr 表示列表的个数

此函数的功能是决定是否计算校验和。它是根据数据结构nids_chksum_ctl中的action进行决定的,如果所要计算的对象不在列表中,则必须都要计算校验和。

2、nids_init

int nids_init(void)

函数返回值:函数调用成功就返回1,失败就返回0。

此函数的功能是对Libnids进行初始化,这是所有设计基于Libnids的程序最开始调用的函数。它的主要内容打开网络接口、打开文件、编译过滤规则、设置过滤规则、判断网络链路层类型、进行必要的初始化工作。

TCP数据流重组函数

3、nids_register_tcp

struct half_stream

{

char state;

char collect;

char collect_urg;

char *data;

intoffset;

intcount;

intcount_new;

intbufsize;

intrmem_alloc;

inturg_count;

u_int acked;

u_int seq;

u_int ack_seq;

u_int first_data_seq;

u_char urgdata;

u_char count_new_urg;

u_char urg_seen;

u_int urg_ptr;

u_short window;

u_char ts_on;

u_char wscale_on;

u_int curr_ts;

u_int wscale;

struct skbuff *list;

struct skbuff *listtail;

};

struct tuple4

{

u_short source;  //源端口

u_short dest;  //目的端口

u_int saddr;   //源IP

u_int daddr;  //目的  IP

};

struct tcp_stream

{

struct tuple4 addr;

char nids_state;

struct lurker_node *listeners;

struct half_stream client;

struct half_stream server;

struct tcp_stream *next_node;

struct tcp_stream *prev_node;

inthash_index;

struct tcp_stream *next_time;

struct tcp_stream *prev_time;

intread;

struct tcp_stream *next_free;

void *user;

};

tcp_stream数据结构描述了一个TCP连接的完整信息,包括的内容非常丰富,它是Libnids开发包中最重要一个数据结构。

成员client表示客户端信息,成员server表示服务器端信息,它们都是half_stream类型的。这样tcp_stream数据结构就描述了一个完整的TCP连接的所有信息。

调用回调函数后,在回调函数中会判断tcp_stream结构体中的nids_state成员的状态,该成员表示连接的逻辑状态,共有6种状态:

NIDS_JUST_EST:表示TCP连接建立,在此状态下就可以决定是否对此TCP连接进行数据分析,可以决定是否捕获TCP客户端接收的数据、TCP服务器端接收的数据、TCP客户端接收的紧急数据或者TCP服务器端接收的紧急数据;

NIDS_CLOSE:表示TCP连接正常关闭;

NIDS_RESET:表示TCP连接被重置关闭;

NIDS_TIMED_OUT:表示由于超时TCP连接被关闭;

NIDS_EXITING:表示Libnids正在退出,在这个状态下可以最后一次使用存储在half_stream数据结构中的缓存数据;

NIDS_DATA:表示接收数据的状态,在这个状态可以判断是否有新的数据到达,如果有就可以把数据存储起来,可以在这个状态之中来分析TCP传输的数据,此数据就存储在half_stream数据结构的缓存之中。

voidnids_register_tcp(void(*))

函数返回值:无

参数描述:一个回调函数

此函数是注册一个TCP连接的回调函数。回调函数的类型定义如下:

voidtcp_callback(struct tcp_stream*ns,void **param);

其中参数ns表示一个TCP连接的所有信息,它的类型是tcp_stream数据结构;

参数param表示要传递的连接参数信息,可以指向一个TCP连接的私有数据。

此回调函数接收的TCP数据存放在half_stream的缓存中,应该马上取出来,一旦此回调函数返回,此数据缓存中存储的数据就不存在了。half_stream成员offset描述了被丢弃的数据字节数。如果不想马上取出来,而是等到存储一定数量的数据之后再取出来,那么可以使用函数nids_discard(structtcp_stream*a_tcp.int num_bytes)来处理。这样,回调函数返回时,Libnids将丢弃缓存数据之前的num_bytes字节的数据。如果不调用nids_discard()函数,那么缓存数据的字节应该为count_new()字节。一般情况下,缓存中的数据应该是count-offset字节(count减去offset)。

///

struct half_stream 的成员:

count:自连接建立以来已经有多少字节已经发送到data缓冲区中;

offset:保存到data缓冲区中的第一个字节的偏移量

char *data:存储正常接收到的数据

3.1 nids_discard

void nids_discard (structtcp_stream *a_tcp, int num);

函数返回值:无

参数a_tcp:表示一个TCP连接

参数num:表示个数

此函数的功能是:丢弃num字节TCP数据,用于存储更多的数据。

4、nids_run

void nids_run(void);

函数返回值:无

参数描述:无

此函数的功能是运行Libnids,进入循环捕获数据包状态。它实际上是调用Libpcap函数pcap_loop()来循环捕获数据包。

Libnids读书笔记:

Libnids(Library Network Intrusion DetectionSystem)网络入侵检测开发包,基于libpcap和libnet开发,是仿照linux内核中的TCP/IP协议部分而实现的。

libnids主要功能:

捕获网络数据包、IP碎片重组、TCP数据流重组以及端口扫描攻击检测和异常数据包检测等。

IP碎片重组是libnids的一个重要内容,是仿照linux内核中的IP重组而实现的,所以非常可靠。

libnids提供了TCP数据流重组功能,这是libpcap所不具备的,利用TCP数据流重组,可以分析基于TCP协议的各种应用层协议。另外,LIBNIDS还提供了检测TCP端口扫描攻击的功能,检测异常数据包的功能,这是入侵检测系统(IDS)最基本的功能。

LIBNIDS的使用范围:

1. 入侵检测系统

2. 网络协议分析

3. 网络嗅探(网络监视)

除此之外利用LIBSNIDS还可以重现网络内容,还原网络数据,如重现HTTP协议中传输的网页、POP3协议中传输的电子邮件等。

LIBNIDS数据结构

基本常量

1.报警类型

下面是在LIBSNIDS中定义的警告描述常量

2. LIBNIDS状态

在对TCP数据流进行重组时,必须考虑到TCP的连接状态,在LIBNIDS中为了方便开发而定义了LIBNIDS状态,共有如下6种:

LIBNIDS描述的是连接的逻辑状态。真正的TCP连接状态有11种,它们对应于TCP协议的状态变迁图中的各个状态,定义如下:

3.校验和

实现了关于是否计算校验和的功能

tuple4

是LIBNIDS中最基本的一种数据结构

half_stream

用来描述TCP连接中一端的所有信息,客户端或服务器端。

tcp_stream

是一个TCP连接的所有信息

nids_prm

描述了LIBNIDS的一些全局参数信息

其中ip_filter函数指针,当IP数据包到达时,默认函数nids_ip_filter被调用,如果此函数返回非零值,此数据包就被处理;如果返回零,就被丢弃。nids_ip_filter函数定义如下:

在LIBNIDS中用nids_prm数据结构定义了一个全部变量nids_params,其定义和初始值如下:

在使用LIBNIDS开发程序时,可以首先对nids_params全局变量的值进行修改,这样对整个libnids就全部有效。

nids_chksum_ctl

描述的是计算检验和

LIBNIDS函数

1.基本函数

int nids_init(void);

函数返回值:函数调用成功返回1,失败返回0

对LIBNIDS进行初始化,主要内容包括打开网络接口、打开文件、编译过滤规则、设置过滤规则、判断网络链路类型、进行必要的初始化工作。

void nids_run(void);

欲行LIBNIDS,进入循环捕获数据包状态。实际上是调用LIBPCAP函数pcap_loop()来循环捕获数据包。

int nids_getfd(void);

函数返回值:执行成功就返回文件描述符,失败就返回-1。

获得文件描述符号

int nids_dispatch(int cnt);

函数返回值:函数执行成功就返回个数、失败就返回负数

参数描述:参数cnt表示捕获的数据包的个数

功能是调用LIBPCAP中的捕获数据包函数pcap_dispatch();

int nids_next(void);

函数返回值:成功1,失败0

调用LIBPCAP中捕获数据包函数pcap_next();

void nids_register_chksum_ctl(structnids_chksum_ctl *ptr, int nr)

参数描述:参数ptr表示nids_chksum_ctl列表,参数nr表示列表中的个数

决定是否计算检验和。是根据数据结构nids_chjsum_ctl中的action进行决定的,如果所要计算的对象不在列表中,则必须都要计算检验和。

2.IP碎片函数

void nids_register_ip_frag(void(*));

参数描述:参数应该是一个回调函数的名字

注册一个能够检测所有IP数据包的回调函数,包括IP碎片。例如可用如下方式调用:

nids_register_ip_frag(ip_frag_function);

这样就注册了一个回调函数ip_ftag_function的定义类型如下:

void ip_frag_function(struct ip*a_packet, int len);

其中a_packet表示接受的IP数据包,参数len表示接受的数据包的长度。

此回调函数中可以检测所有的IP数据包,包括IP碎片。

void nids_register_ip(void(*));

参数描述:参数应该是一个回调函数的名字。

注册一个回调函数,可以接受正常的IP数据包。可以使用如下方式调用:

nids_register_ip(ip_function);

注册一个回调函数ip_function,此回调函数的定义类型如下:

void ip_function(struct ip *a_packet);

其中a_packet表示的是所捕获的IP数据包。

3.TCP数据流重组函数

void nids_register_tcp(void(*));

参数是一个回调函数

注册一个TCP连接的回调函数。定义如下:

void tcp_callback(struct tcp_stream*ns,  void **param);

其中参数ns表示一个TCP连接的所有信息,它的类型是tcp_stream数据结构;参数param表示要传递的连接参数信息,可以指向一个TCP连接的私有数据。

此回调函数接受的TCP数据存放在half_stream的缓存中,应该马上取出来,一旦此回调函数返回,此数据缓存中存储的数据就不存在了。half_stream成员offset描述了呗丢地的数据字节数。如果不想马上取出来,而是等到存储一定数量的数据之后再取出来,那么可以使用函数nids_discard(struct tcp_stream *a_tcp, int num_bytes);来处理。这样回调函数返回时,LIBNIDS将丢弃缓存数据之前的num_bytes字节的数据。如果不调用nids_discard()函数,那么缓存数据的字节应该为count_new字节。一般情况下,缓存中的数据应该是count_offset字节。

void nids_killtcp(struct tcp_stream * a_tcp)

a_tcp表示一个TCP连接

终止TCP连接。实际上是调用LIBNET的函数进行构造数据包,然后发送出去。

void nids_discard(struct tcp_stream *a_tcp, int num)

a_tcp表示一个TCP连接,参数num表示个数

丢弃num字节TCP数据,用于存储更多的数据。

4. UDP注册函数

LIBNIDS也提供了对UDP协议的分析,其注册函数定义如下:

void nids_register_udp(void(*))

参数是一个回调函数

注册一个分析UDP协议的回调函数,定义如下:

void udp_callback(struct tuple4*addr,  char  * buf,  int  len,  struct  ip *iph)

addr表示地址端口信息,包括UDP发送端的IP地址和端口,以及UDP接收端额IP地址和端口;buf表示UDP协议负载数据内容;len表示UDP负载数据的长度;iph表示一个IP数据包,包括IP首部、UDP首部以及UDP负载内容。

(NIDS)网络入侵检测函数接口说明相关推荐

  1. 网络入侵检测--Snort软件NIDS模式报警信息详解

    Snort最有价值的地方,就是它作为NIDS网络入侵检测软件来分析监控实时流量,那么最终能够产生的报警结果,也就是我们最关注的东西,即我们使用snort需要的就是拿到报警信息,并且联动到我们其他软件模 ...

  2. 基于网络(NIDS)的入侵检测系统

    入侵(Instruction)是个 广义的概念,不仅包括被发起攻击的人取得超出合法权限的系统的控制权,也包括搜集漏洞信息,造成拒绝访问(Denial of service)等对计算机系统造成危害的行为 ...

  3. 网络入侵检测 Network Intrusion Detection System (NIDS)

    网络入侵检测 Network Intrusion Detection System--NIDS 网络入侵检测 Network Intrusion Detection System (NIDS) 1.学 ...

  4. 网络入侵检测--Snort软件配置文件snort.conf详解

    Snort最重要的工作模式就是NIDS,网络入侵检测,在NIDS模式下,snort.conf文件是必不可少的. 那么今天,我们来仔细阅读以下snort.conf这个文件,看一下每个部分的功能,都是配置 ...

  5. Libnids库-网络入侵检测的基础框架

    1.Libnids介绍: Libnids(library  network intrusion detection system)是网络入侵检测开发的专业编程接口,实现了网络入侵检测系统的基本框架,提 ...

  6. 综述类_网络入侵检测技术综述

    文章目录 网络入侵检测技术综述 大纲 一.入侵检测系统分类 1.基于数据来源划分 2.基于检测技术划分 二.基于传统机器学习的入侵检测 1.入侵数据处理 2.监督机器学习技术 3.无监督机器学习技术 ...

  7. 文献笔记02 网络入侵检测技术综述(信息安全学报)

    文章目录 网络入侵检测技术综述 大纲 一.入侵检测系统分类 1.基于数据来源划分 2.基于检测技术划分 二.基于传统机器学习的入侵检测 1.入侵数据处理 2.监督机器学习技术 3.无监督机器学习技术 ...

  8. libnet、libnids、libpcap轻松搭建Linux网络入侵检测系统

    利用三个源码包libnet.libnids.libpcap轻松搭建Linux网络入侵检测系统 如果要搭建基于Linux的网络入侵检测系统,必须要安装libnet.libnids.libpcap这三个源 ...

  9. 网络安全实验-入侵检测-基于网络入侵检测系统

     实验目的: 1.掌握snort IDS工作机理 2.应用snort三种方式工作 3.熟练编写snort规则 实验原理: 一.snort IDS概述 snort IDS(入侵检测系统)是一个强大的网络 ...

最新文章

  1. Linux系统卸载Apache(阿帕奇)环境教程
  2. 使用IDEA创建maven父子工程项目
  3. Python程序员面试牢记这些,助你闯关成功!
  4. 回文字符串—回文子串—Manacher算法
  5. oracle 产看执行计划_ODBA 技能SPM计划
  6. html绘制波形图,Html5 canvas 绘制心电波形图
  7. 腾讯云数据库CDB介绍及数据库与应用数据库分析
  8. win2003 Enterprise Edition sp2 企业版序列号
  9. 深度学习热点|超直观无公式图解Contrastive Predictive Coding从脸盲说起
  10. 几个Android云测试
  11. web漏洞-远端WWW服务支持TRACE请求
  12. 把握消费节点,精细服务助推喆啡酒店创优
  13. 数字电子与微型计算机原理课后答案,数字电子与微型计算机原理(非电类)
  14. SAP-Script脚本重复操作功能了解下(懒人必备)
  15. vivo2021笔试愚人节礼品盒问题
  16. 德邦快递接口开发-java(问题简集)
  17. 首次披露!拍立淘技术框架及核心算法,日均UV超千万 2017-8
  18. win7开启uasp协议_UASP与USB模式切换工具
  19. 马云最想见的人—沈亚是如何创业的
  20. 物联网周刊(第 7 期):从创客到创业者的蜕变

热门文章

  1. JS特性检测,检测元素上是否有指定属性或当前浏览器是否支持某元素或某属性
  2. ASP.Net MVC从客户端中检测到有潜在危险的 Request.Form 值
  3. 关于java代码:为什么给Java代码加个空行,class文件就翻脸不认人了?
  4. 2020最新面试题(含答案)
  5. eNSP华为模拟器使用——(5)eNSP模拟路由器
  6. 【GA】GA算法寻优
  7. 小米MIUI10企业模式上线,万物基于MIUI正在向你靠近
  8. Android 9.0 10.0wifi图标出现感叹或者叉的情况的解决方案
  9. 【GIF屏幕录制工具介绍】LICEcap
  10. SharePoint培训第二天