开源深度数据包检测软件工具包 | 同一家n2disk最高支持100Gbit高速网络流量
作者:Sec-Labs | 发布时间:
项目地址
nDPI简介
nDPI是一种开源的、LGPLv3协议的深度包检测库,基于OpenDPI,包含了ntop的扩展。
相关技术点
- 深度包检测技术(DPI)
- LGPLv3协议
- OpenDPI
项目用途
- nDPI用于深度检测网络数据包,可以识别出网络数据包中的协议、应用程序、用户、行为等信息。
- nDPI可以用于网络安全领域,如网络入侵检测、网络流量分析、网络防御等。
- nDPI可以用于网络管理领域,如网络性能优化、流量控制、带宽管理等。
- nDPI可以嵌入到其他应用程序中,用于选择性地阻止特定的Internet流量。


nDPI
nDPI是什么?
nDPI®是一个开源LGPLv3库,用于深度数据包检查。它基于OpenDPI,并包含ntop扩展。我们试图将它们推到OpenDPI源码树中,但没有人回复电子邮件,因此我们决定创建自己的源代码树。
如何编译nDPI
要编译此项目,请执行以下操作:
- ./autogen.sh
- make
仅编译库而无需任何工具或测试:
- ./autogen.sh --with-only-libndpi
- make
要运行测试,请另外执行:
- ./tests/do.sh # 生成并检查PCAP文件中的差异
- ./tests/do-unit.sh # 运行单元测试
- ./tests/do-dga.sh # 运行DGA检测测试
或者运行所有测试:make check
请注意,编译的(最小)先决条件包括:
- GNU工具(autoconf automake libtool pkg-config gettext flex bison)
- GNU C编译器(gcc)或Clang
在Debian / Ubuntu系统上执行以下操作:
- sudo apt-get install build-essential git gettext flex bison libtool autoconf automake pkg-config libpcap-dev libjson-c-dev libnuma-dev libpcre2-dev libmaxminddb-dev librrd-dev
在Arch Linux上:
- sudo pacman -S gcc git gettext flex bison libtool autoconf automake pkg-config libpcap json-c numactl pcre2 libmaxminddb rrdtool
在FreeBSD上:
- sudo pkg install gcc git gettext flex bison libtool autoconf automake devel/pkgconf gmake libpcap json-c pcre2 libmaxminddb rrdtool
请记住,在FreeBSD上使用gmake而不是make
在 MacOS 上:
- brew install coreutils gcc git gettext flex bison libtool autoconf automake pkg-config libpcap json-c pcre2 libmaxminddb rrdtool
在Windows上:
有三种支持的方法来构建nDPI:
- MSYS2(假设已安装MSYS2):
- msys2 -c "pacman --noconfirm -S --needed --overwrite '*' git mingw-w64-x86_64-toolchain automake1.16 automake-wrapper autoconf libtool make mingw-w64-x86_64-json-c mingw-w64-x86_64-crt-git mingw-w64-x86_64-pcre mingw-w64-x86_64-libpcap"
-
Mingw-w64
-
Visual Studio(参见
windows / nDPI.sln)
注意:所有Windows版本均需要启用WinPcap兼容模式的npcap。
如何构建文档
- pip install --upgrade pip
- pip install -r doc/requirements.txt
- make doc
使用内置的python3 Web服务器查看文档:
- make doc-view
如何添加新的协议分析器
添加新协议的整个过程如下:
- 将新协议及其唯一ID添加到:
src/include/ndpi_protocol_ids.h - 在:
src/lib/protocols/中创建新协议 - 需要在
src/include/ndpi_typedefs.h中的ndpi_flow_tcp_struct(仅针对TCP),ndpi_flow_udp_struct(仅针对UDP)或ndpi_flow_struct(两者都针对)中放置整个流程(作为状态变量)的变量。 - 在:
src/include/ndpi_protocols.h中为新协议的搜索函数添加新条目 - 从:
src/include/ndpi_define.h中选择(不更改任何内容)选择位掩码 - 在:
src/lib/ndpi_main.c中设置协议默认端口ndpi_init_protocol_defaults - 确保具有nBPF支持,在同一目录下克隆
PF_RING,其中您克隆了nDPI:git clone https://github.com/ntop/PF_RING/ && cd PF_RING/userland/nbpf && ./configure && make - 从
nDPI根目录,./autogen.sh --with-pcre(nBPF和PCRE通常是可选的,但需要运行/更新所有单元测试) makemake check- 更新文档,将此新协议添加到
doc/protocols.rst中
如何使用nDPI阻止选定的流量
您可以使用nDPI通过将其嵌入应用程序来选择性地阻止选定的Internet流量(请记住,nDPI只是一个库)。ntopng和nProbe cento都可以做到这一点。### nDPI 论文引用
- Deri, Luca等人。nDPI:开源高速深度数据包检查 2014年国际无线通信和移动计算会议(IWCMC)。IEEE,2014年。
视频和演示文稿
与nDPI相关的项目
免责声明
尽管我们尽力检测网络协议,但我们不能保证我们的软件在协议检测方面是无错误且100%准确的。请确保您尊重用户的隐私,并且您有适当的授权来监听、捕获和检查网络流量。
nDPI是美国和欧盟的注册商标。
标签:工具分享, 全流量, 全流量采集