看了好几天,做个笔记理一下思路
先贴一张nids_init()的图:
- nids_exit():释放之前被占用的资源;
- open_live():打开网络接口
static int open_live()
{
char *device;
int promisc = 0;
//初始化网络接口
if (nids_params.device == NULL)
nids_params.device = pcap_lookupdev(nids_errbuf);
if (nids_params.device == NULL)
return 0;
device = nids_params.device;
if (!strcmp(device, "all"))
device = "any";
else
promisc = (nids_params.promisc != 0);
//打开网络接口,返回desc,promisc表示网卡的混杂模式
if ((desc = pcap_open_live(device, 16384, promisc,
nids_params.pcap_timeout, nids_errbuf)) == NULL)
return 0;
//下面的代码不看了
.
.
.
}
- nids_syslog():nids_syslog()函数完成日志的写入
- init_procs():这个函数比较重要,该函数需要展开讨论
static void init_procs()
{
//ip_frag_procs是处理ip_fragment的回调函数队列
ip_frag_procs = mknew(struct proc_node);
ip_frag_procs->item = gen_ip_frag_proc;
ip_frag_procs->next = 0;
//ip_frag_procs是处理ip的回调函数队列
ip_procs = mknew(struct proc_node);
ip_procs->item = gen_ip_proc;
ip_procs->next = 0;
tcp_procs = 0;
udp_procs = 0;
}
- 剩余的三个暂时不讨论,之后再完善