nDPI简介
nDPI是一个用于深度数据包检测的开源 LGPLv3 库。它基于OpenDPI,它包括ntop扩展。它支持Unix/Linux/Windows系统。
官方github链接:GitHub - ntop/nDPI at 4.6-stable
官方pdf文档也提供详细安装与使用教程:nDPI/nDPI_QuickStartGuide.pdf at 4.6-stable · ntop/nDPI · GitHub
安装(Ubuntu)
可通过git clone或手动下载方式获取源码:
git clone https://github.com/ntop/nDPI.git
编译所需环境要求:
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
(推荐)如果想编译完整项目,则在目录下逐行执行:
./autogen.sh
make
(不推荐)如果只想编译库,忽略其他工具或测试程序,则在目录下逐行执行:
./autogen.sh --with-only-libndpi
make
若编译了完整项目,则可通过测试程序检测是否编译完整,逐行执行:
./tests/do.sh
./tests/do-unit.sh
./tests/do-dga.sh
测试程序正常返回结果如下:
ndpiReader使用
ndpiReader是一个demo应用,可进行离线和在线流量分析。
离线pcap分析:
sudo ./example/ndpiReader -i test.pcap
-i:提供pcap文件路径。
在线流量分析:
sudo ./example/ndpiReader -i ens33 -s 30
-i:当-s选项存在时,-i选项提供网卡接口
-s:提供捕获时长
注:执行此语句必须有sudo权限
自定义protocol:
首先新建txt文件,路径与文件名和自定义,此处以protocol.txt为例。
通过HTTP Host识别的协议格式:
host:"<待识别HTTP Host>"@<协议名>
具体内容如下:
# Subprotocols
# Format:
# host:"<value>",host:"<value>",.....@<subproto>
host:"baidu.com"@Baidu
host:"google.com"@Google
通过传输层识别的协议格式:
<tcp|udp>:<端口号>,<tcp|udp>:<端口号>@<协议名>
具体内容如下:
# Format:
# <tcp|udp>:,<tcp|udp>:,.....@
tcp:81,tcp:8181@HTTP
udp:5061-5062@SIP
tcp:860,udp:860,tcp:3260,udp:3260@iSCSI
tcp:3000@ntop
使用ndpiReader采取自定义协议进行识别,则执行:
sudo ./example/ndpiReader -i ens33 -s 30 -p protocol.txt
-p:提供自定义协议文件路径
在识别结果中,协议的部分可看到自定义的协议Baidu和Bilibili的流量统计信息:
补充
nDPI的重心在于nDPI提供的API,此部分内容后续更新。