(NIDS)网络入侵检测函数接口说明
网络入侵检测系统(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重组而实现的,所以非常可靠。
除此之外利用LIBSNIDS还可以重现网络内容,还原网络数据,如重现HTTP协议中传输的网页、POP3协议中传输的电子邮件等。
LIBNIDS数据结构
基本常量
1.报警类型
2. LIBNIDS状态
在对TCP数据流进行重组时,必须考虑到TCP的连接状态,在LIBNIDS中为了方便开发而定义了LIBNIDS状态,共有如下6种:
LIBNIDS描述的是连接的逻辑状态。真正的TCP连接状态有11种,它们对应于TCP协议的状态变迁图中的各个状态,定义如下:
3.校验和
tuple4
half_stream
tcp_stream
nids_prm
其中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);
对LIBNIDS进行初始化,主要内容包括打开网络接口、打开文件、编译过滤规则、设置过滤规则、判断网络链路类型、进行必要的初始化工作。
void nids_run(void);
欲行LIBNIDS,进入循环捕获数据包状态。实际上是调用LIBPCAP函数pcap_loop()来循环捕获数据包。
int nids_getfd(void);
int nids_dispatch(int cnt);
功能是调用LIBPCAP中的捕获数据包函数pcap_dispatch();
int nids_next(void);
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表示接受的数据包的长度。
void nids_register_ip(void(*));
注册一个回调函数,可以接受正常的IP数据包。可以使用如下方式调用:
nids_register_ip(ip_function);
注册一个回调函数ip_function,此回调函数的定义类型如下:
void ip_function(struct ip *a_packet);
3.TCP数据流重组函数
void nids_register_tcp(void(*));
void tcp_callback(struct tcp_stream*ns, void **param);
其中参数ns表示一个TCP连接的所有信息,它的类型是tcp_stream数据结构;参数param表示要传递的连接参数信息,可以指向一个TCP连接的私有数据。
void nids_killtcp(struct tcp_stream * a_tcp)
终止TCP连接。实际上是调用LIBNET的函数进行构造数据包,然后发送出去。
void nids_discard(struct tcp_stream *a_tcp, int num)
4. UDP注册函数
LIBNIDS也提供了对UDP协议的分析,其注册函数定义如下:
void nids_register_udp(void(*))
void udp_callback(struct tuple4*addr, char * buf, int len, struct ip *iph)
(NIDS)网络入侵检测函数接口说明相关推荐
- 网络入侵检测--Snort软件NIDS模式报警信息详解
Snort最有价值的地方,就是它作为NIDS网络入侵检测软件来分析监控实时流量,那么最终能够产生的报警结果,也就是我们最关注的东西,即我们使用snort需要的就是拿到报警信息,并且联动到我们其他软件模 ...
- 基于网络(NIDS)的入侵检测系统
入侵(Instruction)是个 广义的概念,不仅包括被发起攻击的人取得超出合法权限的系统的控制权,也包括搜集漏洞信息,造成拒绝访问(Denial of service)等对计算机系统造成危害的行为 ...
- 网络入侵检测 Network Intrusion Detection System (NIDS)
网络入侵检测 Network Intrusion Detection System--NIDS 网络入侵检测 Network Intrusion Detection System (NIDS) 1.学 ...
- 网络入侵检测--Snort软件配置文件snort.conf详解
Snort最重要的工作模式就是NIDS,网络入侵检测,在NIDS模式下,snort.conf文件是必不可少的. 那么今天,我们来仔细阅读以下snort.conf这个文件,看一下每个部分的功能,都是配置 ...
- Libnids库-网络入侵检测的基础框架
1.Libnids介绍: Libnids(library network intrusion detection system)是网络入侵检测开发的专业编程接口,实现了网络入侵检测系统的基本框架,提 ...
- 综述类_网络入侵检测技术综述
文章目录 网络入侵检测技术综述 大纲 一.入侵检测系统分类 1.基于数据来源划分 2.基于检测技术划分 二.基于传统机器学习的入侵检测 1.入侵数据处理 2.监督机器学习技术 3.无监督机器学习技术 ...
- 文献笔记02 网络入侵检测技术综述(信息安全学报)
文章目录 网络入侵检测技术综述 大纲 一.入侵检测系统分类 1.基于数据来源划分 2.基于检测技术划分 二.基于传统机器学习的入侵检测 1.入侵数据处理 2.监督机器学习技术 3.无监督机器学习技术 ...
- libnet、libnids、libpcap轻松搭建Linux网络入侵检测系统
利用三个源码包libnet.libnids.libpcap轻松搭建Linux网络入侵检测系统 如果要搭建基于Linux的网络入侵检测系统,必须要安装libnet.libnids.libpcap这三个源 ...
- 网络安全实验-入侵检测-基于网络入侵检测系统
实验目的: 1.掌握snort IDS工作机理 2.应用snort三种方式工作 3.熟练编写snort规则 实验原理: 一.snort IDS概述 snort IDS(入侵检测系统)是一个强大的网络 ...
最新文章
- Linux系统卸载Apache(阿帕奇)环境教程
- 使用IDEA创建maven父子工程项目
- Python程序员面试牢记这些,助你闯关成功!
- 回文字符串—回文子串—Manacher算法
- oracle 产看执行计划_ODBA 技能SPM计划
- html绘制波形图,Html5 canvas 绘制心电波形图
- 腾讯云数据库CDB介绍及数据库与应用数据库分析
- win2003 Enterprise Edition sp2 企业版序列号
- 深度学习热点|超直观无公式图解Contrastive Predictive Coding从脸盲说起
- 几个Android云测试
- web漏洞-远端WWW服务支持TRACE请求
- 把握消费节点,精细服务助推喆啡酒店创优
- 数字电子与微型计算机原理课后答案,数字电子与微型计算机原理(非电类)
- SAP-Script脚本重复操作功能了解下(懒人必备)
- vivo2021笔试愚人节礼品盒问题
- 德邦快递接口开发-java(问题简集)
- 首次披露!拍立淘技术框架及核心算法,日均UV超千万 2017-8
- win7开启uasp协议_UASP与USB模式切换工具
- 马云最想见的人—沈亚是如何创业的
- 物联网周刊(第 7 期):从创客到创业者的蜕变
热门文章
- JS特性检测,检测元素上是否有指定属性或当前浏览器是否支持某元素或某属性
- ASP.Net MVC从客户端中检测到有潜在危险的 Request.Form 值
- 关于java代码:为什么给Java代码加个空行,class文件就翻脸不认人了?
- 2020最新面试题(含答案)
- eNSP华为模拟器使用——(5)eNSP模拟路由器
- 【GA】GA算法寻优
- 小米MIUI10企业模式上线,万物基于MIUI正在向你靠近
- Android 9.0 10.0wifi图标出现感叹或者叉的情况的解决方案
- 【GIF屏幕录制工具介绍】LICEcap
- SharePoint培训第二天