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 ...
随机推荐
- mysql数据类型和基础语句
阅读目录 转载 https://www.cnblogs.com/Eva-J/articles/9683316.html 数值类型 日期时间类型 字符串类型 ENUM和SET类型 返回顶部 数值类型 M ...
- [译]《Sphinx权威指南》 - Sphinx入门
本章中,我们会讨论到Sphinx基础的安装.配置和维护.不要被“基础”这形容词糊弄而跳过这个章节.对于“基础”,我不是指简单到显而易见的东西,而是指所有人都会用到的功能. 一般来说,Sphinx会使用 ...
- Django---请求、响应
Django的请求和响应 一.客户端向服务器的请求简介 二.响应对象构造 回到顶部 一.客户端向服务器的请求简介 1.c-->s的传参的4中途径 提取的URL的特定部分,如/天气/北京/ 201 ...
- @CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy
在spring jpa audit 中,在字段或者方法上使用注解@CreatedDate.@CreatedBy.@LastModifiedDate.@LastModifiedBy,当进行实体插入或者更 ...
- [LeetCode] 120. Triangle _Medium tag: Dynamic Programming
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- opatchauto failed with error code 42 补丁目录权限问题
[root@WWJD1 ~]# opatchauto apply $UNZIPPED_PATCH_LOCATION/28183653 OPatchauto session is initiated a ...
- Ubuntu设置su和sudo为不需要密码 (摘录自别处)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/langb2014/article/details/54646675 针对非服务器用户,只是用普通的U ...
- 在Linux下如何使用openssl生成RSA公钥和私钥对
在<Java实现RSA密钥对并在加解密.加签验签中应用的实例>中,我们有用Java代码生成RSA密钥对,其实在Linux操作系统中,用openssl也是很容易生成密钥对的. 一.如果在ub ...
- 001-ADO.NET
Web.config <connectionStrings> <add name="connStr" connectionString="server= ...
- 学习DButils笔记
DBUtills: *********************** 1:创建对象:QueryRunner的对象,其中创建的方式有两种: ①QueryRunner qr = new QueryRunne ...