zoukankan      html  css  js  c++  java
  • 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.

    每走一步,都是新的开始!
  • 相关阅读:
    浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
    浙大数据结构课后习题 练习二 7-2 一元多项式的乘法与加法运算 (20 分)
    浙大数据结构课后习题 练习一 7-1 Maximum Subsequence Sum (25 分)
    浙大数据结构课后习题 练习一 7-1 最大子列和问题 (20 分)
    PAT Basic 1019 数字黑洞 (20 分)
    PAT Basic 1017 A除以B (20 分)
    PAT Basic 1013 数素数 (20 分)
    PAT Basic 1007 素数对猜想 (20 分)
    PAT Basic 1003 我要通过! (20 分)
    自动化运维——HelloWorld(一)
  • 原文地址:https://www.cnblogs.com/shafei/p/10740692.html
Copyright © 2011-2022 走看看