ntop/nDPI
GitHub: ntop/nDPI
一个开源的深度包检测(DPI)库,专注于高速、精准地识别网络流量中的应用层协议。
Stars: 4359 | Forks: 973
# nDPI
[](https://github.com/ntop/nDPI/actions?query=workflow%3ABuild)
[](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:ndpi)
## 什么是 nDPI ?
nDPI® 是一个开源的 LGPLv3 深度包检测库。
关于 nDPI 的常见问题解答 (FAQ) 可在[此处](https://github.com/ntop/nDPI/blob/dev/doc/FAQ.rst)找到
### 如何编译 nDPI
为了编译此项目,请执行
- ./autogen.sh && ./configure
- make
如果在编译 `croaring.c` 时遇到错误,请尝试:
- ./autogen.sh && ./configure --enable-old-croaring
- make
要编译不包含任何工具或测试的库:
- ./autogen.sh && ./configure --with-only-libndpi
- make
支持 Out-of-tree 构建:
- ./autogen.sh
- mkdir build
- cd build
- ../configure && 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](https://www.msys2.org/)):
- 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-pcre2 mingw-w64-x86\_64-libpcap"
2. Mingw-w64
3. Visual Studio (参见 `windows/nDPI.sln`)
注意:所有 Windows 版本都需要安装 [npcap](https://npcap.com/#download) 并启用 WinPcap 兼容模式。
### 如何构建文档
- 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. 需要在整个 flow 持续期间保留的变量(作为状态变量)应放置在:`src/include/ndpi_typedefs.h` 中的 `ndpi_flow_tcp_struct`(仅限 TCP)、`ndpi_flow_udp_struct`(仅限 UDP)或 `ndpi_flow_struct`(两者皆可)。
4. 在 `src/include/ndpi_private.h` 中为新协议的搜索函数添加新条目
5. 从 `src/include/ndpi_define.h` 中选择(不要更改任何内容)一个选择 bitmask
6. 在 `src/lib/ndpi_main.c` 的 `ndpi_init_protocol_defaults` 中设置协议默认端口
7. 确保拥有 nBPF 支持,在克隆 `nDPI` 的同一目录下克隆 `PF_RING`:`git clone https://github.com/ntop/PF_RING/ && cd PF_RING/userland/nbpf && ./configure && make`。您可以忽略 `/bin/sh: 1: ../lib/pfring_config: not found` 错误
8. 从 `nDPI` 根目录执行 `./autogen.sh && ./configure --with-pcre2`(nBPF 和 PCRE2 通常可选,但运行/更新*所有*单元测试需要它们)
9. `make`
10. `make check`
11. 更新文档,将此新协议添加到 `doc/protocols.rst`
12. 更新 Windows Visual Studio 配置,在 `windows/nDPI.vcxproj` 中添加新的 c 文件
### 如何使用 nDPI 阻止选定的流量
您可以将 nDPI 嵌入到应用程序中,从而利用它选择性地阻止特定的 Internet 流量(请记住 nDPI 只是一个库)。[ntopng](https://github.com/ntop/ntopng) 和 [nProbe cento](http://www.ntop.org/products/netflow/nprobe-cento/) 都可以实现此功能。
### nDPI 论文引用
- Deri, Luca, et al. [nDPI: Open-source high-speed deep packet inspection](http://luca.ntop.org/nDPI.pdf) 2014 International Wireless Communications and Mobile Computing Conference (IWCMC). IEEE, 2014.
### 视频与演示
- [nDPI 终极指南](https://www.youtube.com/watch?v=NndEp7__Y1A) [2025]
- [使用 nDPI 解决现实生活问题:从首包分类到混淆流量检测](https://packetfest.ntop.org/slides/Nardi.pdf) [PacketFest, 2025]
- [被动网络流量指纹识别](https://fosdem.org/2025/schedule/event/fosdem-2025-5461-passive-network-traffic-fingerprinting/) [FOSDEM, 2025]
- [使用 Wireshark 深入探索流量指纹](https://www.dropbox.com/scl/fo/zm5amy8fkwz2pj3ojz12a/AMKbeuIToNPH9wCAqB1OWdQ?rlkey=ihnva3yz5heonw59m8br3lxvj&e=2&dl=0) [SharkFest, 2024]
- [用于网络安全与监控的网络流量分类](https://fosdem.org/2022/schedule/event/using_ndpi_to_efficiently_classify_network_traffic/) [FOSDEM, 2022]
- [使用 nDPI 进行监控与安全防护](https://archive.fosdem.org/2021/schedule/event/nemondpi/) [FOSDEM, 2021]
- [知晓未知:如何监控和排查陌生网络](https://www.ntop.org/wp-content/uploads/2017/06/nDPI_Sharkfest_2017.pdf) [SharkFest, 2017]
### nDPI 相关项目
- [nfstream](https://github.com/aouinizied/nfstream)
- [nDPId](https://github.com/utoni/nDPId)
### 免责声明
尽管我们尽最大努力检测网络协议,但无法保证我们的软件完全没有错误,且协议检测 100% 准确。请确保您尊重用户隐私,并拥有监听、捕获和检查网络流量的适当授权。
nDPI 是美国和欧盟的注册商标。
标签:AWS, DLL注入, DPI, Libpcap, Linux网络工具, nDPI, NetFlow, ntop, 协议分析器, 安全研究社区, 客户端加密, 客户端加密, 应用识别, 开源安全工具, 数据包解析, 流量分类, 流量可见性, 流量审计, 深度包检测, 渗透测试辅助, 网络协议识别, 网络安全, 网络安全分析, 网络流量分析, 逆向工程平台, 隐私保护