nDPI
nDPI
目录
nDPI
资料
DPI
- 文章(确实少)
nDPI
- github:https://github.com/ntop/nDPI
Github Wiki:https://github.com/ntop/nDPI/wiki,没啥内容,大概说了下支持协议
- Doxygen文档
- 网站文档:https://www.ntop.org/support/documentation/documentation/ 除了其他nTop的产品都能在上面这个页面中找到:如nProbe、nProbe Cento、n2disk、nEdge、nScrub、nBox、nTab、PF_RING
- **【主要文档】**nDPI:https://www.ntop.org/guides/nDPI/
- 这个文档也能自己构建,官方README里有他教的方法。我最开始没看到上面那个文档,我还自己构建了一次
- 作者:ntop
- 相关产品:开源网络流量监控软件
- tg群:http://t.me/ntop_community(但不知道为什么我刚join进去就被拉黑了?)
- discord:https://discord.gg/frTanSPy6w
- 官网论坛:https://www.ntop.org/support/faq/howto-join-public-ntop-discussions/
- 文章
- 感觉这玩意国内文章比国外的还多……国外的反而少了
ntopng
- 官方资料,见上 nDPI,都是ntop维护的
- 文章
- https://blog.csdn.net/HongkeTraining/article/details/108447830
介绍
什么是 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 上:(请记住在 FreeBSD 上使用 gmake
而不是 make
)
sudo pkg install gcc git gettext flex bison libtool autoconf automake devel/pkgconf gmake libpcap json-c pcre2 libmaxminddb rrdtool
On MacOS: 在 MacOS 上:
brew install coreutils gcc git gettext flex bison libtool autoconf automake pkg-config libpcap json-c pcre2 libmaxminddb rrdtool
在 Windows 上:(注意:所有 Windows 版本都需要 npcap 并启用 WinPcap 兼容模式)
# 支持三种构建 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"
# 2. Mingw-w64
# 3. Visual Studio (详见 windows/nDPI.sln)
如何构建文档
这个官方有点懒,可能人手不够……居然要自己构建doxygen文档。自己有文档又不在这标注一下……相应的文档:https://www.ntop.org/guides/nDPI/(和自己构建出来的是一样的,都是v4.1)
pip install --upgrade pip
pip install -r doc/requirements.txt
make doc
使用内置的python3网络服务器查看文档:
make doc-view
可能的错误:
git/public/nDPI$ make doc
make -C doc html
make[1]: Entering directory '/home/linczero/git/public/nDPI/doc'
doxygen Doxyfile.cfg
make[1]: doxygen: Command not found
make[1]: *** [Makefile:58: html] Error 127
make[1]: Leaving directory '/home/linczero/git/public/nDPI/doc'
make: *** [Makefile:970: doc] Error 2
# 这是由于没有安装doxygen导致的,解决方法:
$ apt-get update && sudo apt-get install doxygen
编译完成后,在 /doc/_build/html
路径
补充:
这里顺便说一下文档构造完后,一个简单的开启http访问服务的方法:
# (安装了python就行,不需要额外安装其他东西) python -m http.server 8000 # python3
这里我WSL遇到了一个问题:
主机无法访问wsl开放的8000端口的服务(该服务通过 python -m http.server 8000 开启)
一些调试:
- wsl2自己是能访问,wsl2中:
curl http://localhost:8000
,能正常响应html- 主机能通过
ssh name@localhost
正常连接wsl2,也能通过ping 172.28.82.115
ping通wsl|- 主机通过
http://172.28.82.115:8000/
无法正常访问wsl中的http服务,体现为一直等待响应不过我没折腾,直接拷出来主机上了
如何添加新的协议解析器
添加新协议的整个流程详细:
- 将新协议及其唯一 ID 添加到:
src/include/ndpi_protocol_ids.h
- 在以下位置创建新协议:
src/lib/protocols/
- 在整个流程期间保留的变量(作为状态变量)需要放置在:
ndpi_flow_tcp_struct
中的src/include/ndpi_typedefs.h
(仅适用于 TCP)、ndpi_flow_udp_struct
(仅适用于 UDP),或ndpi_flow_struct
(适用于两者)。 - 在以下位置添加新协议的搜索功能条目:
src/include/ndpi_protocols.h
- 从以下位置选择(不更改任何内容)选择位掩码:
src/include/ndpi_define.h
- 在
ndpi_init_protocol_defaults
中设置协议默认端口:src/lib/ndpi_main.c
- 确保有 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 通常是可选的,但需要它们来运行/更新所有单元测试) make
make check
- 更新文档,将此新协议添加到
doc/protocols.rst
如何使用 nDPI 阻止选定的流量
您可以使用 nDPI 通过将选定的 Internet 流量嵌入到应用程序中来选择性地阻止该流量(请记住,nDPI 只是一个库)。 ntopng 和 nProbe cento 都可以做到这一点。
nDPI 论文引用
Deri, Luca, et al. nDPI: Open-source high-speed deep packet inspection 2014 International Wireless Communications and Mobile Computing Conference (IWCMC). IEEE, 2014.
视频和演示
nDPI 相关项目
免责声明
虽然我们尽最大努力检测网络协议,但我们不能保证我们的软件在协议检测方面没有错误且 100% 准确。请确保您尊重用户的隐私,并且您拥有监听、捕获和检查网络流量的适当授权。
nDPI 是在美国和欧盟的注册商标。