nDPI-dev分析
目前在
分为两个层次:其一是应用分析,学会如何使用;其二是原理分析,看懂它如何实现。
1. 打包该数据帧,搜集l3、l4层报头信息
2. 查询链接跟踪(如果已被标识,则直接获取到该数据帧所属协议类型)
3. 从链接跟踪中未获取流量所属协议类型,则进入深度报文分析过程
4. 率先进行协议猜测,调用相应的协议分析器分析
5. 猜测协议错误、此时ndpi会分类遍历相关类型的协议分析器进行分析,直至分析出结果或遍历完所有相关的协议分析器
6. 将分析出的协议类型标记到链接跟踪中,以便下次可直接从连接跟踪中拿到协议类型
ndpi_set_proto_defaults函数是设置每个协议号对应的属性:协议标号,名称,默认端口范围,breed属性分类,类型分类,是否有子协议
u_int16_t tcp_master_protoId[2], u_int16_t udp_master_protoId[2] 不知道什么用?
nDPI综合了各种识别方式
IP list ASN分配的
默认端口范围port
Host URL关键字,模式匹配
开放了一个内容匹配的接口,但是未使用。
ndpi_guess_protocol_id() 针对flow提到的端口信息在默认端口协议树中guess protocol id,体现在flow->guessed_protocol_id上。
ndpi_guess_host_protocol_id()针对flow的IP Layer在IP List中查找配置的协议号,体现在flow->guessed_host_protocol_id上。
guessed_category这个猜测根据什么,貌似目前没用到。
guessed_header_category这个是来源ndpi_fill_ip_protocol_category()函数返回,是从IP划分的分类方式。
用户自定义的端口识别优先级最高。
原则:
1. 如果根据端口guess猜测出来的协议号是自定义协议(用户加载配置进来的),那么此时就直接判定该flow是此协议,返回的
ndpi_protocol.master_protocol = NDPI_PROTOCOL_UNKNOWN,
ndpi_protocol.app_protocol = flow->guessed_protocol_id
ndpi_protocol.category是该协议在加载时配置的分类
2. 如果端口guess出来的协议号是非自定义的,或者是unknown的,那么就用IP guess出来的判断,如果Ip guess 出来的是自定义协议号,那么
3. tcp流最多判断10条包,udp流最多判断8条,就不再检测。
一条流flow在什么时候停止继续识别?
1. A TCP flow,whose first packet is NOT a SYN,no protocol has been detected,We don't see how future packets can match anything,hence we giveup here.
nDPI-dev分析的更多相关文章
- 协议的注冊与维护——ndpi源代码分析
在前面的文章中,我们对ndpi中的example做了源代码分析.这一次我们将尽可能深入的了解ndpi内部的结构和运作.我们将带着以下三个目的(问题)去阅读ndpi的源代码. 1.ndpi内部是怎么样注 ...
- Linux网络之设备接口层:发送数据包流程dev_queue_xmit
转自:http://blog.csdn.net/wdscq1234/article/details/51926808 写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的n ...
- 系统磁盘空间/dev/xvda1占满原因分析
由于项目原因需要定期检查磁盘空间占用情况,常用检查命令如下: 1.查看磁盘空间大小 df -lh 2.查看对应文件大小 du --max-depth=1 -h / 于一日发现在使用Flume + Ka ...
- plsql dev中Dynamic Performance Tables not accessible分析解决(转)
使用plsql dev的朋友多遇到过类此如下面的提示: Dynamic Performance Tables not accessible, Automatic Statistics Disabled ...
- [dev][ipsec][dpdk] strongswan/dpdk源码分析之ipsec算法配置过程
1 简述 storngswan的配置里用一种固定格式的字符串设置了用于协商的预定义算法.在包协商过程中strongswan将字符串转换为固定的枚举值封在数据包里用于传输. 协商成功之后,这组被协商选中 ...
- <转> plsql dev中Dynamic Performance Tables not accessible分析解决
相信很多使用plsql dev的朋友多遇到过类此如下面的提示: Dynamic Performance Tables not accessible, Automatic Statistics Disa ...
- 根文件系统的构建与分析(三)之根文件目录及最简/dev目录
根文件系统的构建与分析(三) 转载请注明 http://blog.csdn.net/jianchi88 Author:Lotte 邮箱:baihaowen08@126.com 一.FHS(Fi ...
- 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析
背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...
- Dev C++编写C/C++程序 出现[Error] ld returned 1 exit status报错分析及解决
debug系列第一弹,不知道大家写程序的时候是不是都遇到过如题的报错. 我本人是经常遇到这行熟悉的令人不知所措的报错,可能是我太笨了 有时候百度无果也差不到原因,那就汇总一下目前我遇到的情况吧--持续 ...
- android studio的Beta, Canary, Dev, Stable四种Channel版本介绍、分析与选择
一.概述 在Android Studio下载官网上,有如下介绍: ` Android Studio's built-in update mechanism can be set to receive ...
随机推荐
- nodejs启动web项目
1.在根目录路径下输入 npm install ,会自动下载所需的包 2.安装完成对应的包以后,npm start,会自动打开浏览器
- keras训练cnn模型时loss为nan
keras训练cnn模型时loss为nan 1.首先记下来如何解决这个问题的:由于我代码中 model.compile(loss='categorical_crossentropy', optimiz ...
- mac配置自带vim高亮显示
查找/etc/.vimrc的内容,如果没有的话 新建~/vimrc文件,在文件中写入如下内容即可 set ai " auto indenting set history=100 " ...
- ubuntu 16.04 安装wechat, chrome等
安装wechat 按照https://www.jb51.net/article/131179.htm,结果发现不行. 用apt-get install electronic-wechat的方式呢,也不 ...
- xamarin.forms 动态条件更换数据模板
解决方案1: https://oren.codes/2014/12/31/datatemplateselector-for-xamarin-forms/ 解决方案2: https://docs.m ...
- python数据类型之字典类型
# 字典常用方法clear(), get(), pop(), update(),copy(),items(), popitem(),values(), fromkeys(), keys(),setde ...
- 利用反射和JDBC元数据实现更加通用的查询方法
package com.at221.jdbc; import java.io.IOException; import java.io.InputStream; import java.sql.*; i ...
- Gvim:unable to load python
环境 系统win7 64 bit 软件: Gvim8.1 : MS-Windows 32bit 软件: python2.7.14 windows 64bit 问题 点击打开Gvim时,提示:unabl ...
- BELLMEN-FORD普通
#include <iostream> using namespace std; int m, n, u[100010], v[100010], w[100010];int check;i ...
- Hadoop Mapreduce中shuffle 详解
MapReduce 里面的shuffle:描述者数据从map task 输出到reduce task 输入的这段过程 Shuffle 过程: 首先,map 输出的<key,value > ...