tcp_stream:描述了一个TCP连接的完整信息
struct tcp_stream
{
struct tuple4 addr;//表示了一个TCP连接的四个重要信息:源IP地址、源端口号、目的IP地址和目的端口号
char nids_state; /*表示连接的逻辑状态,共有六种状态:
NIDS_JUST_EST,NIDS_DATA,NIDS_CLOSE,NIDS_RESET,NIDS_TIMED_OUT,NIDS_EXITING。
这个成员描述了libnids的状态信息。状态信息非常重要,不同的状态代表不同的操作情况,
下面分别对它们进行详细阐述:
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数据结构的缓存之中*/
struct lurker_node *listeners;//
struct half_stream client;//表示客户端的信息
struct half_stream server;//表示服务端的信息
struct tcp_stream *next_node;
struct tcp_stream *prev_node;
int hash_index;
struct tcp_stream *next_time;
struct tcp_stream *prev_time;
int read;
struct tcp_stream *next_free;
};
nids_prm描述了libnids的一些全局参数信息
struct nids_prm
{
int n_tcp_streams;//表示哈西表大小,此哈西表用来存放tcp_stream数据结构,默认值为1040。在同一时刻libnids捕获的TCP数据包的最大个数必须是此参数值的3/4
int n_hosts; //表示哈西表大小,此哈西表用来存储IP碎片信息的,默认值为256
char *device; //表示网络接口,libnids将在此网络接口上捕获数据,默认值为NULL。这样libnids将使用pcap_lookupdev来查找可用的网络接口。如果其值为all,表示捕获所有网络接口的数据。
char *filename; //表示用来存储网络数据的捕获文件。此文件的类型必须与libpcap类型一致。如果设置了文件,与此同时就应该设置成员device为NULL,默认值为NULL
int sk_buff_size; //sk_buff的大小。此数据结构是linux内核中一个重要的数据结构,是用来进行数据包排队操作的,默认值为168
int dev_addon; //表示在数据结构sk_buff中用于网络接口上信息的字节数。如果是-1(默认值),那么libnids会根据不同的网络接口进行修正
void (*syslog) ();//默认值为nids_syslog()函数。在syslog函数中可以检测入侵攻击,如网络扫描攻击,也可以检测一些异常情况,如无效TCP标记
int syslog_level; //表示日志等级,默认值为LOG_ALERT
int scan_num_hosts;//表示一个哈西表的大小,(此哈西表用来存储端口扫描信息)表示LIBNIDS将要检测的同时扫描的端口数据。如果其值为0,LIBNIDS将不提供端口扫描功能。默认值为256
int scan_delay; //表示在扫描检测中,两端口扫描的间隔时间,以毫秒来计算,缺省值为3000
int scan_num_ports;//表示相同源地址必须扫描的TCP端口数目,默认值为10
void (*no_mem) (char *);//当libnids发生内存溢出时被调用。
int (*ip_filter) ();/*是一个函数指针,此函数可以用来分析IP数据包,当有IP数据包到达时,此函数就被调用。
如果此函数返回非零值,此数据包就被处理;如果返回零,此IP数据包就被丢弃。
默认值为nids_ip_filter函数,总是返回1。原形:
static int nids_ip_filter(struct ip *x, int len)
{
(void)x;
(void)len;
return 1;
}*/
char *pcap_filter; //表示过滤规则,即libpcap的过滤规则,默认为NULL,表示捕获所有数据包。可在此设置过滤规则,只捕获感兴趣的开发包。
int promisc; //表示网卡的模式,如果是非零,就把此网卡设为混杂模式;否则,设为非混杂模式。默认值为1
int one_loop_less;
};