AIEngine 是新一代交互式/可编程的 Python/Ruby/Java/Lua 数据包检测引擎,具备无需人工干预的学习能力、NIDS(网络入侵检测系统)功能、DNS 域名分类、网络收集器、网络取证等众多功能。
本项目实际托管于 https://bitbucket.org/camp0/aiengine
AIEngine 还能帮助网络/安全专业人士识别流量,并开发签名,用于 NIDS、防火墙、流量分类器等场景。
AIEngine 的主要功能包括:
要使用 AIEngine(精简版本),只需执行二进制文件 aiengine 或使用 python/ruby/java/lua 绑定。
luis@luis-xps:~/c++/aiengine/src$ ./aiengine -h
aiengine 1.5
必选参数:
-I [ --input ] arg 设置网络接口、pcap 文件或包含 pcap 文件的目录。
链路层可选参数:
-q [ --tag ] arg 选择以太网层的标签类型(vlan、mpls)。
TCP 可选参数:
-t [ --tcp-flows ] arg (=32768) 设置池中的 TCP 流数量。
UDP 可选参数:
-u [ --udp-flows ] arg (=16384) 设置池中的 UDP 流数量。
正则可选参数:
-R [ --enable-signatures ] 启用签名引擎。
-r [ --regex ] arg (=.*) 设置用于评估流的正则表达式。
-c [ --flow-class ] arg (=all) 使用 tcp、udp 或 all 来匹配流上的签名。
-m [ --matched-flows ] 显示匹配正则的流。
-j [ --reject-flows ] 拒绝匹配正则的流。
-w [ --evidence ] 生成包含匹配正则的 pcap 文件,用于取证分析。
频率可选参数:
-F [ --enable-frequencies ] 启用频率引擎。
-g [ --group-by ] arg (=dst-port) 按 src-ip、dst-ip、src-port 和 dst-port 分组频率。
-f [ --flow-type ] arg (=tcp) 使用 tcp 或 udp 流。
-L [ --enable-learner ] 启用学习引擎。
-k [ --key-learner ] arg (=80) 设置学习引擎的键。
-b [ --buffer-size ] arg (=64) 设置内部缓冲区大小,用于生成正则。
-y [ --enable-yara ] 生成 yara 签名。
可选参数:
-n [ --stack ] arg (=lan) 设置网络栈(lan、mobile、lan6、virtual、oflow)。
-d [ --dumpflows ] 将流输出到标准输出。
-s [ --statistics ] arg (=0) 显示网络栈的统计信息(5 个级别)。
-T [ --timeout ] arg (=180) 设置流的超时时间。
-P [ --protocol ] arg 显示网络栈中特定协议的统计信息。
-e [ --release ] 释放缓存。
-l [ --release-cache ] arg 释放特定缓存。
-p [ --pstatistics ] 显示进程统计信息。
-h [ --help ] 显示帮助。
-v [ --version ] 显示版本字符串。
AIEngine 根据网络拓扑支持五种类型的网络栈。
StackLan (lan) 基于 IPv4 的局域网。
StackLanIPv6 (lan6) 支持 IPv6 的局域网。
StackMobile (mobile) 移动网络(Gn 接口),用于 IPv4。
StackVirtual (virtual) 用于虚拟/云环境的栈,支持 VxLan 和 GRE 透明传输。
StackOpenFlow (oflow) 用于 OpenFlow 环境的栈。
AIEngine 也是一个 python/ruby/java/lua 模块,使其在与其他系统和功能集成方面更加灵活。 python 模块提供导出的主要对象如下:
DNSInfo
BitcoinInfo
DatabaseAdaptor(抽象类)
DomainName
DomainNameManager
Flow
FlowManager
Frequencies
FrequencyGroup
HTTPInfo
HTTPUriSet
IMAPInfo
IPAbstractSet(抽象类)
IPSet
IPSetManager
LearnerEngine
NetworkStack(抽象类)
StackLan
StackLanIPv6
StackMobile
StackOpenFlow
StackVirtual
POPInfo
PacketDispatcher
PacketFrequencies
Regex
RegexManager
SIPInfo
SMTPInfo
SSLInfo
MQTTInfo
CoAPInfo
有关类方法的完整描述,请执行:
import pyaiengine
help(pyaiengine)
请查看配置 wiki 页面或 examples 目录,以获取更多有趣的示例。 [https://bitbucket.org/camp0/aiengine/wiki/Configurations]
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ make
编译库的第一种方式是使用 O3 编译优化,这将生成一个小型库。
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make python
$ python pyai_test.py
第二种方式是通过使用 setup.py 以标准的 Python 方式编译库,这将生成一个比前一种方式更大的库。
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ python setup.py build_ext -i
$ python pyai_test.py
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make ruby
$ ruby ruai_tests.rb
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make java
$ java -cp ".:/usr/share/java/junit.jar:/usr/share/java/hamcrest/core.jar:./buildjava" org.junit.runner.JUnitCore JunitTestSuite
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make lua
$ lua luai_tests.lua
AIEngine 使用 C++11/14 标准开发,并遵循 GPLv2 协议。
检出 AIEngine 源码:
$ git clone https://bitbucket.com/camp0/aiengine
如果您对某些功能感兴趣或需要帮助,请给我发送电子邮件。欢迎任何形式的贡献。
AIEngine 采用测试驱动开发。为了保持相同的生命周期,新功能应在所创建的新功能目录中包含单元测试,并且为了与整个系统集成,后续还要与 /src 目录下的主 tests.cc 文件集成。