开源深度数据包检测软件工具包 | 同一家n2disk最高支持100Gbit高速网络流量

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/ntop/nDPI

nDPI简介

nDPI是一种开源的、LGPLv3协议的深度包检测库,基于OpenDPI,包含了ntop的扩展。

相关技术点

  • 深度包检测技术(DPI)
  • LGPLv3协议
  • OpenDPI

项目用途

  • nDPI用于深度检测网络数据包,可以识别出网络数据包中的协议、应用程序、用户、行为等信息。
  • nDPI可以用于网络安全领域,如网络入侵检测、网络流量分析、网络防御等。
  • nDPI可以用于网络管理领域,如网络性能优化、流量控制、带宽管理等。
  • nDPI可以嵌入到其他应用程序中,用于选择性地阻止特定的Internet流量。

ad1a1b7183162653

ad1a1b7183162705

 

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:

  1. 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"
  1. Mingw-w64

  2. 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

如何添加新的协议分析器

添加新协议的整个过程如下:

  1. 将新协议及其唯一ID添加到:src/include/ndpi_protocol_ids.h
  2. 在:src/lib/protocols/中创建新协议
  3. 需要在src/include/ndpi_typedefs.h中的ndpi_flow_tcp_struct(仅针对TCP),ndpi_flow_udp_struct(仅针对UDP)或ndpi_flow_struct(两者都针对)中放置整个流程(作为状态变量)的变量。
  4. 在:src/include/ndpi_protocols.h中为新协议的搜索函数添加新条目
  5. 从:src/include/ndpi_define.h中选择(不更改任何内容)选择位掩码
  6. 在:src/lib/ndpi_main.c中设置协议默认端口ndpi_init_protocol_defaults
  7. 确保具有nBPF支持,在同一目录下克隆PF_RING,其中您克隆了nDPIgit clone https://github.com/ntop/PF_RING/ && cd PF_RING/userland/nbpf && ./configure && make
  8. nDPI根目录,./autogen.sh --with-pcre(nBPF和PCRE通常是可选的,但需要运行/更新所有单元测试)
  9. make
  10. make check
  11. 更新文档,将此新协议添加到doc/protocols.rst

如何使用nDPI阻止选定的流量

您可以使用nDPI通过将其嵌入应用程序来选择性地阻止选定的Internet流量(请记住,nDPI只是一个库)。ntopngnProbe cento都可以做到这一点。### nDPI 论文引用

视频和演示文稿

与nDPI相关的项目

免责声明

尽管我们尽力检测网络协议,但我们不能保证我们的软件在协议检测方面是无错误且100%准确的。请确保您尊重用户的隐私,并且您有适当的授权来监听、捕获和检查网络流量。

nDPI是美国和欧盟的注册商标。

标签:工具分享, 全流量, 全流量采集