目前在

分为两个层次:其一是应用分析,学会如何使用;其二是原理分析,看懂它如何实现。

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.

转载于:https://www.cnblogs.com/shafei/p/10740692.html

nDPI-dev分析相关推荐

  1. python nDPI 流量分析框架 Nfstream 简介

    Nfstream本质上来说是一款Python包,它可以提供快速.灵活且有效的数据结构,支持针对在线或离线状态的网络数据进行分析,这种方式既简单又直观.在Nfstream的帮助下,广大研究人员可以直接在 ...

  2. 【NDPI】源码解析之深度包检测分析(一)

    (Albert.2019.4.28) 文章目录: 前言: 正文: 一.nDPI深度包检测流程: 二.重要结构体的源码分析 1.ndpi_ethdr.ndpi_iphdr.ndpi_tcphdr.ndp ...

  3. 【智能路由器】ndpi深度报文分析源码框架

    [智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 某些需求可能会要求路由能精确的分析出流经路由的流量是属于什 ...

  4. 【智能路由器】ndpi深度报文分析之协议分析器

    [智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 本篇博客讲述ndpi已经实现的QQ协议分析器的实现 以及 ...

  5. Android内存分析和调优

    最近我们的android app占用了大量内存,于是领导安排做减少内存占用的工作. 要优化内存,首先要做的就是分析内存占用情况.android提供了多个工具和命令进行内存分析. 第一层 Procran ...

  6. android 内存分析 名词解释,Android内存分析和调优(下)

    出自:http://www.cnblogs.com/zdwillie/p/3287150.html 最后一部分是关于native heap,.dex,/dev/other的优化.​ Native He ...

  7. 深度数据包检测DPI开发解析

    深度数据包检测(Deep packet inspection,缩写为 DPI)是一种特殊的网络技术,一般网络设备只会查看以太网头部.IP头部而不会分析TCP/UDP里面的内容这种被称为浅数据包检测;与 ...

  8. linux网络接口数据重新封包,Linux网络之设备接口层:发送数据包流程dev_queue_xmit...

    写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的netdevice层面,来贯穿interface传输数据包的流程,kernel 博大精深,这也仅仅是一点个人愚见,作为一 ...

  9. 手摸手教学 - Docker(五) 超级爽!持久化数据库-bind mounts!

    若有疑问参考前面几篇Docker文章,循序渐进 不懂算我输,话不多说,实战为主! 作者:变优秀的小白 Github:关注YX-XiaoBai 爱好:Americano More Ice ! QQ学习交 ...

  10. Android/Linux系统性能分析及工具

    1. CPU 1.1 CPU架构 CPU推动了所有软件的运行,因此通常是系统性能分析的首要目标.现代系统一般有多颗CPU,通过内核调度器共享给所有运行软件.当需求的CPU资源超过了系统力所能及的范围时 ...

最新文章

  1. 资本|五大科技巨头并购投资布局分析
  2. iPhone拍人像,人头直接不见了,什么情况?
  3. python实现logistic_用Python实现机器学习算法—Logistic 回归算法
  4. DC课程笔记-数字逻辑综合工具-DC Environment Attributes
  5. jQuery框架的简单使用(H5)
  6. 更改Tomcat虚拟内存大小
  7. UVALive - 7511 Multiplication Table(暴力+模拟)
  8. 成功,要“借力”,不要“尽力”(深刻!)
  9. 跨站点脚本(xss)_跨站点脚本(XSS)和预防
  10. DM达梦创建表空间用户
  11. 通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明
  12. 最简单、图解:阿里云服务器上装 Docker 、 CentOS上 docker安装(3分钟装完)
  13. 文件服务器ping延时大,windowns 2008 ping 127.0.0.1延迟大的解决方法。
  14. cdr图片随意拉伸变形_如何操作才能使照片拉伸不变形
  15. 吴恩达深度学习5.2笔记_Sequence Models_自然语言处理与词嵌入
  16. 二叉搜索树-php实现 插入删除查找等操作
  17. [转]c# winform tcp connect timeout 连接超时设置
  18. m4a转换mp3格式怎么弄?
  19. excel 第15讲:条件格式与公式
  20. 安装 Linux mint后的一些设置

热门文章

  1. HackerRank Nimble Game
  2. hadoop NameNode HA 和ResouceManager HA
  3. Qt 读写XML文件
  4. Convert(varchar(8),Getdate(),108) 什么意思
  5. Java 将excel中的内容导入数据库中
  6. 相对熵(relative entropy或 Kullback-Leibler divergence,KL距离)的java实现(三)
  7. git第一次提交代码至远程仓库-强制推送
  8. vue路由切换时内容组件的滚动条回到顶部
  9. vue为什么要求组件模板只能有一个根元素
  10. 单片机中断机制对日常生活的启示_单片机原理部分课后习题解