科来网络分析系统(技术交流版)使用说明书

一、软件概述

(一)产品定位

科来网络分析系统(Colasoft Capsa,进程名CSNAS)是便携式网络分析系统,集网络流量采集、协议解码、故障诊断、安全分析于一体,与Wireshark同属协议分析类工具,但更强调"开箱即用的统计视图、自动诊断与回溯分析"。

(二)三种分析模式

|----------|------------------------------|---------------------------|
| 模式 | 说明 | 入口 |
| 实时分析 | 选定网卡实时抓包并分析 | 启动页→选择网络适配器→分析设置→开始分析 |
| 回放分析 | 打开既有抓包文件进行回放式分析(本说明书重点) | 启动页→回放分析→选择文件 |
| 无线分析 | 对无线网卡/无线抓包文件的分析(含AP解密配置) | 启动页→无线分析 |

回放分析支持的抓包格式极广。从安装目录modules下的格式插件(PFELibpcap、PFELibpcapng、PFEMSNetMon、PFESniffer、PFEObserver、PFEEtherPeek、PFEHPUN、PFENovell、PFESunSnoop等)可见,其兼容libpcap/cap、pcapng、微软NetMon、Sniffer、Observer、EtherPeek等十余种格式,Wireshark生成的文件可直接导入。

(三)技术交流版的功能限制

技术交流版为免费版本,官方文档明确标注的限制包括:其一,归属地字段(location、srclocation、dstlocation)不可用;其二,会话字段中的解压后内容(session.uncompressedpayload)与解密后内容(session.decryptedpayload)过滤不可用。其余如DPI Filter表达式过滤、全部统计视图、诊断、矩阵、数据包导出等功能完整可用。

二、系统界面与标准工作流程

(一)主界面五大区域

主界面自顶向下分为:全局功能区(开始/停止、过滤器、全局显示过滤器、导出等)、节点浏览器(按物理/IP/协议等维度组织的节点树,点击即过滤)、主视图区(各统计视图与数据包视图)、警报浏览器、状态栏(含过滤器状态图标,点击可直达过滤器设置)。

图2-1 技术交流版主界面

(二)分析视图清单

|--------|---------------------------|------------------------------------------|
| 类别 | 视图 | 用途 |
| 总览 | 我的图表、概要、诊断 | 自定义图表;流量总览;自动故障诊断(按应用/传输/网络/链路层给出事件) |
| 协议 | 协议 | 按协议层级统计包数与流量占比 |
| 端点 | 物理端点、IP端点 | 按MAC/IP统计收发量,定位"流量主角" |
| 会话 | 物理会话、IP会话、TCP会话、UDP会话 | 四元组会话统计,支持会话字段过滤与TCP流还原 |
| 应用 | 域名、服务、应用、端口 | 按域名/服务/应用识别结果/端口聚合 |
| 关系 | 矩阵 | 端点间通信关系矩阵图,一眼看出谁和谁通信 |
| 明细 | 数据包、全流量解码 | 逐包列表与逐字段解码 |
| 输出 | 日志、报表 | 协议日志;自动生成分析报告 |

(三)回放分析标准流程

第一步,启动页选择"回放分析",添加抓包文件(可一次多个);第二步,在分析设置中按需配置分析对象、诊断、过滤器、数据包保存等;第三步,点击"开始分析",等待进度完成;第四步,按"总览→端点→会话→数据包"的顺序下钻分析;第五步,需要取证时,在数据包视图中选中数据包导出为新文件。

图2-2 回放分析配置界面

性能提示:GB级抓包文件对本软件同样是重负载(实测加载大文件时内存占用可超过6GB,界面消息循环会被阻塞,属正常现象),建议先用Wireshark/tshark按时间窗口或过滤条件切出小文件再导入回放。

三、过滤器体系总览(四道关卡)

本软件的过滤体系分为四个层次,理解各自的生效阶段是正确使用的前提:

|--------|----------------------|-----------------------|---------------------------------|
| 关卡 | 名称 | 生效阶段 | 配置方式 |
| 第一道 | 分析过滤器(旧版:简单/高级过滤器) | 捕获/回放时,决定哪些包进入分析引擎 | 流程图式:地址/端口/协议/包值/包大小,接受或拒绝 |
| 第二道 | DPI Filter过滤器(新版,默认) | 捕获/回放时,深度包检测级别的表达式过滤 | 表达式书写(本说明书第四章) |
| 第三道 | 显示过滤器(各视图内) | 分析完成后,只改变视图显示,不改变分析数据 | 数据包视图用元数据字段与协议字段;会话视图用session字段 |
| 第四道 | 全局显示过滤器(快捷键Alt+G) | 作用于所有视图,优先级最高 | 标签式:IP/端口/协议/应用/进程/时间戳六类条件 |

新旧过滤器的关系:DPI Filter仅适用于64位操作系统且CPU支持AVX指令集的环境;不满足时系统自动退回旧版"简单过滤器/高级过滤器"。旧版过滤器采用可视化的"与/或/非"流程图组合条件,配置界面分别提供地址、端口、协议、数据包值、数据包大小、数据包模式等条件,两个条件之间以"接受/拒绝"决定包的去向,简单过滤器可无损转换为高级过滤器,反向转换会丢失条件。

四、DPI Filter 表达式完全指南(核心)

点击过滤器设置界面输入框旁的"?"按钮,即打开"表达式帮助"窗口:左侧是目前支持的全部协议与字段的树形结构(可搜索字段名),右侧展示所选字段支持的操作符、值类型与书写方式。本章完整收录其规则并补充示例。

图4-1 "?"按钮打开的表达式帮助窗口(左:字段树;右:操作符与类型说明)

(一)表达式的层次结构

DPI Filter规则由逻辑表达式组成,每条逻辑语句由简单表达式组成。官方示例:

payload.findpos('GET ') = 0 or srcip.in(192.168.0.0/24)

其中 payload.findpos('GET ') = 0 与 srcip.in(192.168.0.0/24) 各是一个简单表达式;简单表达式加上逻辑运算符 or 构成原子逻辑语句;若干原子逻辑语句经逻辑运算组合后形成一条完整的规则语句。规则命中的定义是:整条规则的值计算结果为true(见本章第八节三态逻辑)。

图4-2 DPI Filter过滤器设置界面

(二)五种字面值的书写规则

1.String字符串类型

以一对单引号包裹,不支持转义,字符集为除单引号外的所有可见ASCII字符;不允许空字符串字面值。十六进制形式在单引号前加HEX前缀修饰(HEX与单引号之间不允许有任何字符),例如 HEX'00 0A';引号内大小写均可,字节之间必须以空白字符分隔,单字节宽度为2、不足补零。

2.DateTime日期时间类型

分秒级(DTSec)与纳秒级(DTNanoSec)两种精度,以有无纳秒位为唯一判定标识。字面值以 DT' 与 ' 包裹,支持闰秒(如DT'2024-01-01 07:59:60+0800')。四种格式:

|-----------------------------------------------------|--------------------------------|
| 格式 | 说明 |
| DT'year month mday hour min sec' | 秒级,本机时区 |
| DT'year month mday hour min sec .nanosec' | 纳秒级,本机时区(纳秒9位,与前缀.不得夹杂其他字符) |
| DT'year month mday hour min sec ±timezone' | 带时区秒级(时区4位数字,前两小时后两分,与+/-一同出现) |
| DT'year month mday hour min sec .nanosec ±timezone' | 带时区纳秒级 |

约束要点:年份4位且不小于1970;月、日、时、分、秒均2位不足补零;秒允许60(闰秒);DT字面值忽略所有空白字符;年月日之间、时分秒之间最多用一个合法非空白分隔符(! " # $ % & * + , - . / : ; @ ^ _ | ~ 等)。

3.正则表达式类型

仅可用于find()函数,书写形式为 /pattern/modifiers,modifiers可缺省。pattern为Perl/POSIX风格,单个反斜线表示转义,\ 与 / 作字面字符时需写成 \\ 与 \/。修饰符:i大小写不敏感;m多行(^匹配行首、$匹配行尾,注意payload第一个字节的位置不是行首);s使.匹配包括换行在内的所有字符;V允许空串如(a|)。高级特性支持情况:支持(?:pattern)非捕获组;不支持零宽断言、回溯引用、条件引用。

4.Int整数类型

8字节有符号整数。

5.IP类型

目前仅支持IPv4(IPv6请用String类型字段)。字面值支持点分十进制、点分十六进制及混用(如192.0.0x2.235);整型写法(0xC00002EB、3221226219)被有限支持但不可用于书写范围。IP范围与子网均为左闭右闭区间,形式如 192.168.1.0-192.168.1.255、192.168.1.0/24,掩码也可写十六进制(/0x18)。

(三)内置元数据字段总表

元数据字段有两种书写方式:普通形式"数据源.字段",以及内置全局字段的简写形式"字段"。各字段的适用过滤器类型如下表:

|--------------------------------------|-----------------|--------|-----------|-----------|
| 字段 | 释义 | 类型 | 分析过滤器 | 显示过滤器 |
| packet | 数据包 | String | √ | √ |
| capturelength | 数据包捕获长度 | Int | √ | √ |
| packetlength | 数据包长度 | Int | √ | √ |
| payload | TCP或UDP负载 | String | √ | √ |
| payloadlength | 负载长度 | Int | √ | √ |
| ip / srcip / dstip | IP地址/源/目的 | IP | √ | √ |
| port / srcport / dstport | 端口/源/目的 | Int | √ | √ |
| location / srclocation / dstlocation | 归属地(技术交流版不支持) | String | √ | √ |
| protocol | 协议 | Int | √ | √ |
| protocolpath | 协议路径 | String | √ | √ |
| timestamp | 时间戳 | Int | √ | √ |
| alias / srcalias / dstalias | 地址别名(物理地址和IP地址) | String | × | √ |
| application | 应用名称 | String | √ | √ |
| process | 进程名称 | String | × | √ |

数据包视图的显示过滤器另含TCP分析字段(tcpanalysis,仅适用于数据分析后);会话视图的显示过滤器只有会话字段(session,针对会话统计数据过滤,见本章第九节)。协议字段(如http.url)同样可用,字段名可在"表达式帮助"的字段树中检索。

(四)类型成员函数

1.逻辑第三态判断函数

|------------|----------------------|------------------|
| 函数 | 示例 | 说明 |
| isnull | payload.isnull() | 判断左操作数是否为异常值 |
| valid | payload.valid() | 判断左操作数是否为有效值 |

2.String类型成员函数

|---------------------------|---------------------------------|-------------------------------------------------------------------------|
| 函数 | 示例 | 说明 |
| find(特征串) | payload.find('HTTP 1.') | 固定特征串匹配,母串中存在即为true |
| find(正则) | payload.find(/hcat/i) | 正则版本匹配。payload2,10.find(/a0-9*c/)表示全包搜索,只保证c的落点在2,10区间 |
| pattern_find | a.pattern_find('abc?', 'i') | 表达能力同find(/正则/),但正则转义规则不同 |
| substr | a.substr(1, 3) = 'ab' | 取子串,左闭右开,参数可为表达式、可有限缺省 |
| findpos | payload.findpos('ABC') | 返回特征串在母串中的偏移(从0计);未找到则表达式值为异常;比对值不能小于0 |
| N2H16 / N2H32 / N2H64 | HEX'1234'.N2H16() = 0x1234 | 将字符串前2/4/8字节转序(网络序转主机序)后转为uint16/32/64整数 |
| length | payload.length() > 10 | 与关系运算符连用,表示字段值长度范围 |
| U8 / U16 / U32 / U64 | payload.U16() = 0x1234 | 将字符串前1/2/4/8字节直接(不转序)转为uint8/16/32/64整数 |

注意N2H系列与U系列的区别:N2H先做网络字节序到主机字节序的转换,U系列不做转序------解析网络协议多字节字段(大端)时用N2H,解析小端数据时用U系列。

3.IP类型成员函数

|------------|----------------------------------------------------------------------|-----------------------------------|
| 函数 | 示例 | 说明 |
| in(范围) | srcip.in(192.168.1.0-192.168.1.30) | 判断是否属于连续IP范围 |
| in(子网) | dstip.in(192.168.1.1/24) | 判断是否属于某子网 |
| in(集合) | srcip.in('192.168.9.2,192.168.1.0-192.168.1.30,192.168.10.1/24') | 判断是否属于集合,元素以逗号分隔,可混用单IP/范围/子网 |

(五)操作符全集与优先级

逻辑运算符:! 或 not(非,优先级高,从右向左)、&& 或 and(与,中,从左向右)、|| 或 or(或,低,从左向右)。分组控制符()优先级最高。修饰符包括:()函数调用、a,b字符串边界修饰、.成员访问、.用于IP字面值、''String字面值、HEX''十六进制前缀、/pattern/modifiers正则。

运算符优先级总表(由高到低):

|---------|--------------------|---------------------------------------|
| 优先级 | 运算符 | 说明 |
| 1 | . | 成员访问:global.payload、ip.in(1.1.1.1/12) |
| 2 | a,b | 字符串范围修饰 |
| 3 | () | 分组 |
| 4 | ~ | 取反位运算(单目,右结合) |
| 5 | * / % | 乘、除、取余(左结合) |
| 6 | + - | 加、减(左结合) |
| 7 | << >> | 左移、右移(左结合) |
| 8 | & | 按位与 |
| 9 | ^ | 按位异或 |
| 10 | | | 按位或 |
| 11 | = != > >= < <= | 关系运算(左结合) |
| 12 | ! / not | 逻辑非(右结合) |
| 13 | && / and | 逻辑与(左结合) |
| 14 | || / or | 逻辑或(左结合) |

(六)边界修饰符 a, b 的使用规则

a,b是字符串边界修饰符,表示左闭右开区间,作用于String得到一个子串(子串禁止再使用边界修饰)。a为期望左边界,b为期望右边界,取值范围为Int32全区间,且a<=0严格成立。取值策略:字符串与范围修饰有交集则取交集,无交集得到异常串nullstr;修饰0长空串或异常串均得异常串。a缺省表示最左边界,b缺省表示最右边界,不允许同时缺省;0, 与, 0等价,可表达母串自身。合法写法共九种:

1, 2\] \[1, \] \[, -20\] \[-10, -1\] \[-10,\] \[0, \] \[, 0\] \[, -1\] \[, 10

负索引从尾部倒数,例如payload-10,-1表示载荷倒数第10字节到倒数第1字节的部分------定位协议尾部特征(如尾部魔数)时非常实用,这是Wireshark显示过滤器不具备的能力。

(七)多值字段的陷阱:!= 与 !() 不等效

ip、port、protocol以及所有协议下的全部字段均为多值字段(一个数据包同时具有源值和目的值,协议则跨层级存在多个)。对多值字段,"不等于"和"取反"的结果不同:

ip != 192.168.9.12 等效于 srcip != 192.168.9.12 or dstip != 192.168.9.12

!(ip = 192.168.9.12) 等效于 srcip != 192.168.9.12 and dstip != 192.168.9.12

protocol != TCP 与 !(protocol = TCP) 不等效

port != 80 与 !(port = 80) 不等效

要表达"源和目的都不是某值",必须使用 !(字段 = 值) 的写法------这与Wireshark中 ip.addr != x 的著名陷阱完全一致,迁移经验时务必注意。

(八)三态逻辑:true / false / abnormal

表达式的值域为三态:{true, false, abnormal}。异常态非真非假。运算规则:其一,任何abnormal参与的谓词运算(含全部关系比较),结果均为abnormal;其二,abnormal参与逻辑或(||),仅与true运算得true,其余均为abnormal;其三,abnormal参与逻辑与(&&),仅与false运算得false,其余均为abnormal;其四,abnormal的逻辑非(!)仍为abnormal。规则命中仅指规则值为true。

引发异常的四种典型情况:其一,String边界修饰无交集越界,得到异常串nullstr;其二,payload长度为0时payload为异常串nullstr(语义为"没有负载";并非所有0长String字段都是异常,取决于字段注册策略);其三,findpos未找到特征串;其四,其他异常情形。实战中可用isnull()与valid()两个函数显式检测异常态。

(九)会话字段 session.*(会话视图专用)

会话视图的显示过滤器针对会话统计数据,字段均为Int类型(不支持浮点写法),并支持人性化的单位后缀:

|--------|----------------------------------------------------------------------------------------------------------------------|---------------------------------|
| 类别 | 字段 | 单位 |
| 字节数 | session.bytes、session.ep1bytes、session.ep2bytes | 默认b(byte),支持k/kb、m/mb、g/gb、t/tb |
| 时间 | session.duration、session.averageacktime、session.ep1averageacktime、session.ep2averageacktime、session.maxacktime | 默认纳秒ns,支持us、ms、s、m(分)、h(时) |
| 内容 | session.payload(TCP/UDP会话内容)、session.uncompressedpayload(HTTP解压后,交流版不可用)、session.decryptedpayload(SSL/TLS解密后,交流版不可用) | 按String类型表达式书写 |

session.bytes > 1024k 等价于 session.bytes > 1mb

session.duration > 60s 等价于 session.duration > 1m

ep1/ep2分别指会话的两个端点,配合字节数与ACK时间字段可直接筛查"单向大流量会话""响应迟缓会话"等异常模式,无需任何先验知识。

五、表达式实战示例(含Wireshark语法对照)

(一)常用示例

|------------------------|-------------------------------------------------------------------|
| 目的 | DPI Filter表达式 |
| 匹配payload中的字符串abcd | payload.find('abcd') |
| 用十六进制查找同样内容 | payload.find(HEX'61 62 63 64') |
| 限定在偏移2到50内查找 | payload2,50.find('abcd') |
| 从头50字节内查找 | payload,50.find('abcd') |
| 从偏移10起查找 | payload10,.find('abcd') |
| 倒数10字节范围内查找 | payload-10,-1.find('abcd') |
| 特征串偏移大于10 | payload.findpos('abcd') > 10 |
| 不存在http.url字段的包 | http.url.isnull() |
| payload长度大于100 | payload.length() > 100 |
| payload首字节大于10 | payload.U8() > 10 |
| 单个IP | ip = 192.168.9.12 |
| IP范围 | ip.in(192.168.9.1-192.168.9.15) |
| IP子网 | ip.in(192.168.1.1/24) |
| IP集合 | ip.in('192.168.9.20,192.168.9.1-192.168.9.15,192.168.1.1/24') |
| 时间点匹配 | timestamp = DT'2026-9-10 13:00:10' |
| 纳秒级时间匹配 | timestamp = DT'2026-9-10 13:00:10.981815000' |
| 带时区匹配 | timestamp = DT'2026-09-26 11:02:59+0800' |
| 大小写不敏感正则 | payload.find(/aBCd/i) |
| 正则转义 | payload.find(/ab\\c\\d/i) |
| 任意单字符 | payload.find(/ab.d/s) |
| 任意多字符 | payload.find(/ab.*d/s) |

(二)与Wireshark显示过滤器的对照(迁移速查)

|-------------------|----------------------------------------------------|-----------------------------------------------------------------------------------------------|
| 分析目的 | Wireshark语法 | 科来DPI Filter语法 |
| 按内容找SSH横幅 | frame contains 53:53:48:2d | payload.find(HEX'53 53 48 2D') |
| 载荷前4字节为SSH- | tcp.payload0:4==53:53:48:2d | payload0,4.find(HEX'53 53 48 2D') 或 payload.findpos(HEX'53 53 48 2D') = 0 |
| 某IP的所有流量 | ip.addr==188.188.188.188 | ip = 188.188.188.188 |
| 源IP | ip.src==188.188.188.188 | srcip = 188.188.188.188 |
| 源网段 | ip.src==10.1.10.0/24 | srcip.in(10.1.10.0/24) |
| 目的端口 | tcp.dstport==888 | dstport = 888 |
| 两条件同时成立 | ip.src==A && tcp.dstport==B | srcip = A and dstport = B |
| 排除某IP(双方向) | !(ip.addr==x) | !(ip = x) |
| HTTP请求的URI含某串 | http.request.uri contains "showMessage" | http.url.find('showMessage') |
| 时间窗口 | frame.time_epoch>=a && frame.time_epoch<=b | timestamp >= DT'2026-05-08 00:09:00+0800' and timestamp <= DT'2026-05-08 00:11:00+0800' |
| 会话体量超50KB | -z conv,tcp人工排序 | session.bytes > 50k(会话视图直接过滤) |

可以看到,科来表达式在"内容检索"(find/HEX/边界修饰/负索引)与"会话统计过滤"(session.bytes、session.duration)两个方向上都比Wireshark显示过滤器更接近分析意图------Wireshark里需要-z conv,tcp导出再排序的"判定尺"分析,在科来会话视图中一行 session.bytes > 50k 即可完成。

六、全局显示过滤器(Alt+G)

全局显示过滤器针对所有分析视图生效,一旦设置,所有视图优先按其条件显示。支持六类条件:IP地址(每行一个)、端口(每行一个)、协议、应用、进程(exe路径+进程ID)、时间戳(基准时间+规则表达式)。在各分析视图的右键菜单中,可将当前选中项(源IP、目的IP、源端口、目的端口、协议、应用、进程、时间戳)一键追加为全局过滤器标签。

过滤器以标签形式呈现,单击标签执行过滤,Ctrl+左键可多选组合,再次点击高亮标签或在管理界面去勾选可禁用;标签上的"×"删除单个,工具栏按钮可全部禁用或全部删除;管理界面支持增删改与导入导出。

图6-1 全局显示过滤器管理界面

七、旧版过滤器(简单过滤器与高级过滤器)

在不满足64位+AVX的环境,或习惯可视化配置的场景,可使用旧版过滤器。简单过滤器提供地址(物理地址/IP/IP范围/IP掩码,可控方向:地址1->地址2、地址2->地址1、双向)、端口(单端口/范围/多端口,可控方向)、协议(协议树多选)三类条件;会话过滤器需勾选协议规则并勾选"仅用于会话"。

高级过滤器在简单过滤基础上增加数据包值、数据包大小、数据包模式配置三类条件,并以直观的过滤关系流程图展示"与/或/非"逻辑:工具条提供与(必须同时满足)、或(至少满足其一)、非(取反)、编辑、删除等命令。过滤器的走向为:选择"接受"则匹配的包进入分析模块、不匹配的进垃圾桶;选择"拒绝"则相反。

图7-1 简单过滤器设置界面

图7-2 高级过滤器的流程图式条件组合

八、软件架构解析

本章为对安装目录(D:\Program Files\Colasoft\CSNAS)的静态分析结论,帮助进阶用户理解软件能力边界与可扩展点。

(一)过滤引擎

csfilter.dll(1.2MB)与dpi_filter.dll(4.6MB)是两级过滤引擎:前者承载旧版流程图过滤器,后者即DPI Filter(深度包检测)表达式引擎。第四章全部表达式语法最终由dpi_filter.dll解析执行,官方要求64位系统与AVX指令集,说明其匹配核心使用了向量化指令加速------这也是其在大流量下仍能做全载荷正则匹配的原因。

(二)解码体系与Lua脚本框架

安装目录存在tsharkdecode.dll,表明其解码体系复用了Wireshark/tshark的解码能力;另有fast_decoders目录(快速解码器)与CSDecodeEditor.exe(解码脚本编辑器,配套帮助CSDecodeEditor.chm)。根目录三个Lua文件揭示了自定义解码器的开发框架:

|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 文件 | 作用 |
| travel.lua | 字段遍历框架:_PostTraversal后序遍历字段树、_SetName按语言设置字段长短名、_SetComment生成字段描述、_EvalSummary生成信息列摘要;内置字段显示类型码表 |
| proto.lua | 协议定义模板:_PROTO.showtype声明字段显示类型、_PROTO.comment定义字段描述格式串、_PROTO.summary定义摘要格式、_PROTO.cst提供zh_cn/en_us双语言文案 |
| field.lua | 字段结构示例与_show_type_tbl类型码表:mac=0x20、ipv4_addr=0x21、ipv6_addr=0x22、chksum=0x23、string=0x25、timems=0x29、time=0x30、port=0x31、bin=0x32、dec=0x36、hex=0x38、atoi=0xf6、float=0xfb、string_ascii=0xfd、group=0xfe等 |

换言之,科来的协议解码器可以用Lua脚本自行扩展:定义字段树、显示类型与多语言文案后,由travel.lua框架完成解析结果的展示渲染------这与Wireshark的Lua插件机制异曲同工。

(三)数据资源文件

|----------------------------------------|------------|------------------------------|
| 文件 | 大小 | 推断用途 |
| data\App.json | 约21MB | 应用识别特征库(DPI应用层协议与应用识别) |
| data\coladb-ipv4-cn.dat | 约594MB | IPv4归属地数据库(中国区) |
| data\coladb-ipv6-cn.dat | 约425MB | IPv6归属地数据库(中国区) |
| data\manuf | 约2.5MB | MAC地址厂商表(与Wireshark同源格式) |
| data\port.dat | 约100KB | 端口-服务映射表 |
| data\cstre.ctd | 约5.9MB | 解码/协议相关数据 |
| data\GeoIP2-Country-Locations.csv | 约12KB | GeoIP国家地区代码表 |

(四)前端架构

libcef.dll(约122MB)与cef.pak、icudtl.dat、echarts.min.js等文件表明:软件的图表与部分界面基于Chromium Embedded Framework(CEF)构建,可视化图表使用百度ECharts渲染。这解释了其图表交互体验接近网页应用的原因。

(五)配置存储

用户配置位于 %APPDATA%\Colasoft\CSNAS\ :Data\AnalysisProfiles\project_N\ 保存每个分析方案的过滤器(1.packetFilters.dat)、全局过滤器(global_filter.json)、图表与诊断设置;Cache\CefCache为CEF缓存。界面列定制存于注册表 HKCU\Software\Colasoft\csnas\17.0.0.22\CustomizeSettings。备份配置即备份AnalysisProfiles目录。

(六)配套命令行与小工具

|-------------------------|--------------------------|
| 程序 | 功能 |
| cmdl.exe / cmdl.bat | 命令行入口(帮助cmdl.chm) |
| cping.exe | 科来Ping工具(可视化多目标Ping) |
| csmac.exe | 科来MAC地址扫描器 |
| pktplayer.exe | 数据包播放器(把抓包文件回放到网卡) |
| pktbuilder.exe | 数据包生成器(构造并发送自定义数据包) |
| cscodec.exe | 编解码转换工具 |
| CSDecodeEditor.exe | 解码脚本编辑器(Lua解码器开发) |
| IpGeolocation.exe | IP地址归属地查询 |

九、附录:DPI Filter表达式速查表

|---------------|-------------------------------------------------------------------------------------------------------------------|
| 场景 | 表达式 |
| 载荷含特征串 | payload.find('特征串') 或 payload.find(HEX'53 53 48 2D') |
| 载荷开头匹配 | payload.findpos('特征串') = 0 |
| 载荷区间匹配 | payload2,50.find('特征串') ;尾部:payload-10,-1.find('特征串') |
| 正则匹配 | payload.find(/ab.*d/is) |
| 某IP(任一方向) | ip = 188.188.188.188 |
| 源/目的IP | srcip = x ;dstip = x |
| 网段/范围/集合 | srcip.in(192.168.1.0/24) ;in(a-b) ;in('x,y/24') |
| 端口 | port = 888;srcport = x ;dstport = x |
| 双方向排除 | !(ip = x) |
| 字段不存在 | http.url.isnull() |
| 载荷长度 | payload.length() > 100 |
| 首字节值 | payload.U8() > 10 ;大端双字节 payload.N2H16() = 0x1234 |
| 时间窗口 | timestamp >= DT'202 6 -05-08 00:09:00+0800' and timestamp <= DT'202 6 -05-08 00:11:00+0800' |
| 会话体量 | session.bytes > 50k |
| 会话时长 | session.duration > 1m |
| 会话内容 | session.payload.find('特征串') |
| 组合示例 | srcip = 188.188.188.188 and dstport = 888 and payload.find(HEX'53 53 48 2D') |

技术交流版限制速记:location归属地字段不可用;session.uncompressedpayload与session.decryptedpayload过滤不可用;DPI Filter需64位系统且CPU支持AVX指令集。

说明书完。

相关推荐
代码不停2 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金3 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟3 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php
阿里嘎多学长4 小时前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管
wangchunyu1145 小时前
Python 数据可视化实战入门教程
开发语言·python·信息可视化
唐青枫6 小时前
Yii2 Applications 详解:应用生命周期、组件配置与多入口实战
php
我是唐青枫6 小时前
Yii2 Controller 详解:路由、Action、过滤器与 CRUD 实战
php
学逆向的7 小时前
C 突破编译器限制
c语言·开发语言·网络安全
jimy17 小时前
C++ 虚函数表:基类和派生类共用一张 vtable 吗?
开发语言·c++