DAQ 与Snort
在snort-daq中,daq的控制流程是这样的。
如上所述,Snort在初始化的时候载入了daq。这个时候snort的所调用的api是daq_load_modules
。也就是说,这个时候在主线程没有启动网卡,初始化实例的操作。
在初始化整个snort之后(载入配置,载入daq及其他各个模块等等)。snort就进入了分析的阶段了。这个阶段的主角是
pig
,或者说更本质的,是pig
下的analyzer
。
Snort下面开n个pig
线程。pig
线程下面调用analyzer
来进行包解析。
包解析的过程中是在pig
线程中多线程并行进行的。每一个analyzer
下面都初始化一个daq instance
并调用acquire
进行抓包并分析。每一个daq instance
下面都有一个或多个网卡来获取数据。因为目的主要是介绍daq,所以怎么解析就不提了。
从上图和上面的介绍就可以看得出来,一个snort下面有多个daq instance
并行运行。每一个daq instance
都会进行初始化操作,占用系统资源,获取网卡&#x