nidsh.docx
- 文档编号:28376709
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:11
- 大小:18.90KB
nidsh.docx
《nidsh.docx》由会员分享,可在线阅读,更多相关《nidsh.docx(11页珍藏版)》请在冰豆网上搜索。
nidsh
#ifndef_NIDS_NIDS_H
#define_NIDS_NIDS_H
#defineNIDS_MAJOR1/*主版本号*/
#defineNIDS_MINOR20/*次版本号*/
#include
enum
{
NIDS_WARN_IP=1,/*表示IP数据包异常*/
NIDS_WARN_TCP,/*表示TCP数据包异常*/
NIDS_WARN_UDP,/*表示UDP数据包异常*/
NIDS_WARN_SCAN/*表示有扫描攻击发生*/
};
enum
{
NIDS_WARN_UNDEFINED=0,/*表示未定义*/
NIDS_WARN_IP_OVERSIZED,/*表示IP数据包超长*/
NIDS_WARN_IP_INVLIST,/*表示无效的碎片队列*/
NIDS_WARN_IP_OVERLAP,/*表示发生重叠*/
NIDS_WARN_IP_HDR,/*表示无效IP首部,IP数据包发生异常*/
NIDS_WARN_IP_SRR,/*表示源路由IP数据包*/
NIDS_WARN_TCP_TOOMUCH,/*表示TCP数据个数太多,因为在Libnids中在同一时刻捕获的TCP个数最大值为TCP连接参数的哈西表长度的3/4*/
NIDS_WARN_TCP_HDR,/*表示无效TCP首部,TCP数据包发生异常*/
NIDS_WARN_TCP_BIGQUEUE,/*表示TCP接受的队列数据过多*/
NIDS_WARN_TCP_BADFLAGS/*表示错误标记*/
};
/*Libnids状态描述的是连接的逻辑状态,真正的TCP连接状态有11种.
*TCP_ESTABLISHEDTCP连接建立,开始传输数据
*TCP_SYN_SEND主动打开
*TCP_SYN_RECV接受SYN
*TCP_FIN_WAIT1
*TCP_FIN_WAIT2
*TCP_TIME_WAIT
*TCP_CLOSE
*TCP_CLOSE_WAIT
*TCP_LAST_ACK
*TCP_LISTEN
*TCP_CLOSING
*/
#defineNIDS_JUST_EST1/*表示TCP连接建立,在此状态下就可以决定是否对此TCP连接进行数据分析,可以决定是否捕获TCP客户端接收的数据,TCP服务端接收的数据,TCP客户端接收的紧急数据或者TCP客户端接收的紧急数据*/
#defineNIDS_DATA2/*表示接收数据的状态,在这个状态可以判断是否有新的数据到达,如果有就可以把数据存储起来,可以在这个状态之中来分析TCP传输的数据,此数据就存储在half_stream数据接口的缓存之中*/
#defineNIDS_CLOSE3/*表示TCP连接正常关闭*/
#defineNIDS_RESET4/*表是TCP连接被重置关闭*/
#defineNIDS_TIMED_OUT5/*表示由于超时TCP连接被关闭*/
#defineNIDS_EXITING6/*表示Libnids正在退出,在这个状态下可以最后一次使用存储在half_stream数据结构中的缓存数据*/
/*校验和*/
#defineNIDS_DO_CHKSUM0/*表示告诉Libnids要计算校验和*/
#defineNIDS_DONT_CHKSUM1/*表示告诉Libnids不要计算校验和*/
structtuple4/*描述一个地址端口对,它表示发送发IP和端口以及接收方IP和端口,适用TCP,UDP*/
{
u_shortsource;/*源IP地址的端口号*/
u_shortdest;/*目的IP地址的端口号*/
u_intsaddr;/*源IP地址*/
u_intdaddr;/*目的IP地址*/
};
structhalf_stream/*描述在TCP连接中一端的所有信息,可以是客户端,也可以是服务端*/
{
charstate;/*表示套接字的状态,也就是TCP的状态*/
charcollect;/*可以表示有数据到达,此数据存放在data成员中,也可以表示不存储此数据到data中,此数据忽略.如果大于0就存储,否则就忽略*/
charcollect_urg;/*可以表示有紧急数据到达,此数据就存放在urgdata中,也可以表示不存储此数据到urgdata中,此速数据忽略.如果大于0就存储,否则就忽略*/
char*data;/*用户存储正常接受到的数据*/
intoffset;/*表示存储在data中数据的第一个字节的偏移量*/
intcount;/*表示从TCP连接开始已经存储到data中的数据的字节数*/
intcount_new;/*有多少新的数据存储到data中,如果为0,则表示没有新的数据到达*/
intbufsize;
intrmem_alloc;
inturg_count;/*用来存储紧急数据*/
u_intacked;
u_intseq;
u_intack_seq;
u_intfirst_data_seq;
u_charurgdata;
u_charcount_new_urg;/*表示有新的紧急数据到达,如果为0表示没有新的紧急数据*/
u_charurg_seen;
u_inturg_ptr;
u_shortwindow;
u_charts_on;
u_charwscale_on;
u_intcurr_ts;
u_intwscale;
structskbuff*list;
structskbuff*listtail;
};
structtcp_stream/*描述一个TCP连接的所有信息*/
{
structtuple4addr;
charnids_state;
structlurker_node*listeners;
structhalf_streamclient;/*表示客户端信息*/
structhalf_streamserver;/*表示服务端信息*/
structtcp_stream*next_node;
structtcp_stream*prev_node;
inthash_index;
structtcp_stream*next_time;
structtcp_stream*prev_time;
intread;
structtcp_stream*next_free;
};
structnids_prm/*描述了Libnids的一些全局参数信息*/
{
intn_tcp_streams;/*表示哈西表大小,此哈西表用来存放tcp_stream数据结构,默认值1040.在同一时刻Libnids捕获的TCP数据包的最大个数必须是此参数值的3/4*/
intn_hosts;/*表示哈西表的大小,此哈西表用来存储IP碎片信息的,默认值为256*/
char*device;/*表示网络接口,Libnids将在此网络接口上捕获数据,默认值为NULL.这样Libnids将使用pcap_lookupdev来查找可以用的网络接口.如果其值为all,表示捕获所有网络接口的数据*/
char*filename;/*表示用来存储网络数据的捕获文件,此文件的类型必须与Libpcap类型一致,如果设置了文件,与此同时就应该设置device为NULL,默认值为NULL*/
intsk_buff_size;/*表示的是数据接口sk_buff的大小.sk_buff是Linux内核中一个重要的数据结构,是用来进行数据包排队操作的,默认值为168*/
intdev_addon;/*表示在数据结构sk_buff中用于网络接口上信息的字节数.如果是-1(默认值),那么Libnids会根据不同的网络接口进行修正*/
void(*syslog)();/*是一个函数指针,默认值为nids_syslog()函数.在syslog函数中可以检测入侵攻击,如网络扫描攻击,也可以检测一些异常情况,如无效TCP标记*/
intsyslog_level;/*表示日志等级,默认值是LOG_ALERT*/
intscan_num_hosts;/*表示一个哈西表的大小,(此哈西表用来存储端口扫描信息)表示Libnids将要检测的同时扫描的端口数据.如果其值为0,Libnids将不提供端口扫描功能.默认值256*/
intscan_delay;/*表示在扫描检测中,俩端口扫描的间隔时间,以毫秒来计算,缺省值为3000*/
intscan_num_ports;/*表示相同源地址必须扫描的TCP端口数目,默认值为10*/
void(*no_mem)(char*);/*是一个函数指针,当Libnids发生内存溢出时被调用*/
int(*ip_filter)();/*是一个函数指针,此函数可以用来分析IP数据包,当有IP数据包到达时,此函数就被调用.如果此函数返回非零值,此数据包就被处理;如果返回零,此IP数据包就被丢弃.默认值为nids_ip_filter函数,总是返回1.*/
char*pcap_filter;/*表示过滤规则,即Libpcap的过滤规则,默认值为NULL,表示捕获所有数据包.可以在此设置过滤规则,只捕获感兴趣的开发包*/
intpromisc;/*表示网卡模式,如果是非零,就把此网卡设置为混杂模式;否则,设为非混杂模式.默认值为1*/
intone_loop_less;/*初始值为0*/
intpcap_timeout;/*表示捕获数据返回的时间,以毫秒计算.实际上它表示的就是Libpcap函数中的pcap_open_live函数的timeout参数,默认值1024*/
};
intnids_init(void);
*返回值:
调用成功返回1,失败返回0
*参数:
无
*功能:
对Libnids初始化,这是所有设计基于Libnids的程序最开始调用的函数.它的主要内容包括打开网络接口,打开文件,编译过滤规则,
*判断网络链路层类型,进行必要的初始化工作
*/
voidnids_register_ip_frag(void(*));/**/
*返回值:
无
*参数:
回调函数名字
*功能:
注册一个能够检测所有IP数据包的回调函数,包括IP碎片.e.g
nids_register_ip_frag(ip_frag_function);
voidip_frag_function(structip*a_packet,intlen)
a_packet表示接收的IP数据包len表示接收的数据包长度
此回调函数可以检测所有的IP数据包,包括IP碎片
*/
voidnids_register_ip(void(*));/**/
*返回值:
无
*参数:
回调函数名字
*功能:
注册一个回调函数,此回调函数可以接收正常的IP数据包.e.g
nids_register_ip_frag(ip_frag_function);
voidip_frag_function(structip*a_packet)
a_packet表示接收的IP数据包
此回调函数可以接收正常的IP数据包,并在此函数中对捕获数到的IP数据包进行分析.
*/
voidnids_register_tcp(void(*));
*返回值:
无
*参数:
回调函数
*功能:
注册一个TCP连接的回调函数.回调函数的类型定义如下:
voidtcp_callback(structtcp_stream*ns,void**param)
ns表示一个TCP连接的所有信息,param表示要传递的参数信息,可以指向一个TCP连接的私有数据
此回调函数接收的TCP数据存放在half_stream的缓存中,应该马上取出来,一旦此回调函数返回,此数据缓存中存储的数据就不存在
了.half_stream成员offset描述了被丢弃的数据字节数.如果不想马上取出来,而是等到存储一定数量的数据之后再取出来,那么可
以使用函数nids_discard(structtcp_stream*ns,intnum_bytes)来处理.这样回调函数返回时,Libnids将丢弃缓存数据之前
的num_bytes字节的数据.如果不调用nids_discard()函数,那么缓存数据的字节应该为count_new字节.一般情况下,缓存中的数据
应该是count-offset字节
*/
voidnids_register_udp(void(*));
*返回值:
无
*参数:
回调函数
*功能:
注册一个分析UDP协议的回调函数,回调函数的类型定义如下:
voidudp_callback(structtuple4*addr,char*buf,intlen,structip*iph)
addr表示地址端口信息buf表示UDP协议负载的数据内容len表是UDP负载数据的长度iph表示一个IP数据包,包括IP首部,UDP首部以及UDP负载内容
*/
voidnids_killtcp(structtcp_stream*);
*返回值:
无
*参数:
表示一个TCP连接
*功能:
终止TCP连接.它实际上是调用Libnet的函数进行构造数据包,然后发送出去
*/
voidnids_discard(structtcp_stream*,int);
*返回值:
无
*参数:
参数1一个TCP连接参数2个数
*功能:
丢弃参数2字节TCP数据,用于存储更多的数据
*/
voidnids_run(void);
*返回值:
无
*参数:
无
*功能:
运行Libnids,进入循环捕获数据包状态.它实际上是调用Libpcap函数pcap_loop()来循环捕获数据包
*/
intnids_getfd(void);
*返回值:
调用成功返回文件描述符,失败返回-1
*参数:
无
*功能:
获得文件描述符号
*/
intnids_dispatch(int);
*返回值:
调用成功返回个数,失败返回负数
*参数:
表示捕获数据包的个数
*功能:
调用Libpcap中的捕获数据包函数pcap_dispatch()
*/
externvoidnids_register_chksum_ctl(structnids_chksum_ctl*,int);
/*
*返回值:
调用成功返回1,失败返回0
*参数:
无
*功能:
调用Libpcap中的捕获数据包函数pcap_next()
*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nidsh