第二天:NetBIOS模块学习与设计

本文介绍了NetBIOS提供的三种主要服务:名称服务、数据报服务和会话服务,并详细阐述了名称服务的工作原理及其在网络中的作用。

NetBIOS是提供给上层SMB API调用的传输接口,请原谅我这么来形容NetBIOS,因为如果按照7层的OSI结构的话,NetBIOS应该属于Session层。

 

NetBIOS为上层的应用程序提供了下面三种主要的服务

 

一,Name Service: 主要用于NebBIOS名字注册和查询,运行在UDP的137端口;

名字服务中的名字可以注册成两种类型,分别是unique名字和group名字。其中,NetBIOS名字节点的Name是不能超过16个字节的字符串。

名字服务中的名字查询则主要有下面两种方式,

1,在IP局域网上的注册查询,节点通过广播进行查找,使用这种方式进行查找的节点叫B节点。

2,在可路由的Internet上的注册查询,由于广播不能跨越子网,所以将名字信息都是发送给一个名字服务器,名字服务器通常部署在子网的DHCP服务器中,以便所有的客户端能够获取到服务器的IP地址并进行注册,使用这种方式进行注册和查找的节点叫做P节点。

 

 

二,Datagram Service: 运行在UDP的138端口,处理单播unicast (也叫做 "specific"), 组播multicast (group), 广播broadcast NetBIOS 数据包。

 

三,Session Service:SMB主要使用的传输方式,运行在TCP的139端口。

 

 

 

好了,到目前为止,关于NetBIOS,这些最基本的东西来起来也差不多了,开始设计吧。对于Name Service这一块,主要目标就是要完成名字服务的查询。这一切都是基于TCP之上的。

 

对了,忘了说一句,这里推荐一种网络抓包工具,叫做WireShark,Windows/Linux皆有版本。它的好处是可以解析出很多的网络协议格式。

 

在最开始的时候,按照RFC需要实现两个加密函数,虽然我觉得这种加密的方式实在太弱了,因为可以解密。但是考虑到SMB是如此的一个古老系统,所以也就忍了,乖乖的按照文档实现了FirstLevelEncoding和SecondLevelEncoding两个函数。

将内容转为word: 一、系统整体架构设计(适配路由器低性能场景) 系统采用“边缘端(路由器)-云端协同”架构,边缘端负责实时数据处理轻量识别,云端专注模型训练全局优化,通过轻量化交互形成闭环。整体分为7大核心模块,覆盖从数据采集到结果输出的全流程: ┌─────────────────────────────────────────────────────────────────┐ │ 边缘端(路由器) │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ 数据采集层 │ │预处理层 │ │多步识别引擎│ │新设备管理 │ │ │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │ │ │ │ │ │ │ ┌─────▼──────────────▼──────────────▼──────────────▼─────┐ │ │ │ 本地资源调度模块 │ │ │ └───────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌───────────────────────▼───────────────────────────────┐ │ │ │ 用户交互反馈模块 │ │ │ └───────────────────────────────┬─────────────────────────┘ │ └───────────────────────────────────┼───────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 云端 │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │数据聚合层 │ │模型训练层 │ │模型压缩层 │ │OTA推送层 │ │ │ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │ └─────────────────────────────────────────────────────────────────┘ 二、模块详细设计(含输入/输出/核心逻辑) 1. 数据采集层(路由器端) 核心目标:全面捕获设备网络特征,按MAC聚合原始数据。 采集对象字段映射: 协议类型 捕获时机 提取字段 特征重要性 ARP 设备接入时 mac(唯一标识) 核心(100%) DHCPv4/v6 设备请求IP时 dhcp_params、dhcp_vendor、dhcp_hostname、dhcp_mud 高(90%) HTTP 设备发起网页请求时 hua_userAgent 中(70%) Bonjour 设备广播服务时 bonjour_name、bonjour_services_txt、bonjour_services_name 中(60%) NetBIOS 设备局域网发现时 netBios_domain、netBios_name 低(40%) 采集策略: 新设备:接入后触发30秒全协议扫描,获取基础字段; 活跃设备:每10分钟增量采集(仅捕获新出现的协议报文); 休眠设备:1小时无流量则停止采集,保留历史数据(最多3条)。 存储限制:单设备数据≤2KB(约500字符),总缓存≤200设备(LRU淘汰)。 2. 数据预处理层(路由器端) 核心目标:清洗原始数据,提取结构化特征,降低模型输入维度。 处理流程: 数据清洗: 无效过滤:移除空字符串、随机生成的hostname(如device-xxxx); 标准化:MAC统一为“XX:XX:XX:XX:XX:XX”格式,文本字段转为小写; 脱敏:MAC后3字节哈希处理(如A8:B9:C0:12:34:56→A8:B9:C0:***)。 特征提取: 特征类型 提取方法 输出维度 MAC特征 前3字节OUI(如A8:B9:C0)、后3字节哈希 2 文本特征 hua_userAgent关键词提取(如“android”“iphone”“redmi”)→ 词袋向量 ≤8 服务特征 bonjour_services_name映射为预定义类型(如“_printer”→1,“_airplay”→2) ≤5 数特征 dhcp_params的Option数量(归一化0-1)、报文交互频率(归一化0-1) 2 特征压缩:通过PCA将总维度压缩至≤15(降低模型计算量)。 3. 多步识别引擎(路由器端核心) 采用“分层递进+模型-规则混合”架构,分5阶段识别,每阶段输出结果及置信度(0-100): 阶段编号 识别目标 输入特征 技术实现 输出示例 资源控制 阶段1 厂商识别 MAC OUI、dhcp_vendor、dhcp_mud ① 模型:逻辑回归(参数5KB,训练OUI厂商映射) ② 规则:内置前2000厂商OUI表 华为(95%)、苹果(80%) 耗时≤2ms,RAM≤1MB 阶段2 设备类型识别 厂商结果、bonjour服务、dhcp_hostname ① 模型:深度3的决策树(参数8KB) ② 规则:服务类型关键词(如“_camera”→摄像头) 手机(90%)、智能插座(75%) 耗时≤3ms,RAM≤1.5MB 阶段3.1 设备系列识别 厂商、User-Agent关键词、dhcp_hostname ① 模型:朴素贝叶斯(参数6KB,文本分类) ② 规则:系列关键词库(如“iphone”“redmi”) iPhone(90%)、Redmi(85%) 耗时≤5ms,RAM≤2MB 阶段3.2 具体型号识别 系列结果、完整User-Agent、dhcp_mud ① 模型:量化TextCNN(体积1.5MB,细粒度文本匹配) ② 规则:型号正则库(如“iphone 15”) iPhone 15(80%)、Redmi K70(75%) 仅对阶段3.1置信度≥70%执行,耗时≤8ms 阶段4 OS版本识别 User-Agent、dhcp_vendor、厂商结果 ① 模型:线性SVM(参数6KB) ② 规则:版本号正则(如“android 14”) Android 14(90%)、iOS 17(80%) 耗时≤5ms,RAM≤2MB 协作机制: 前一阶段结果作为后一阶段的强约束(如厂商=苹果→阶段3.1仅匹配苹果系列),减少模型泛化压力。 置信度融合规则: 模型规则结果冲突时,取置信度高者(差≥10%); 置信度接近(差<10%)时,标记为“模糊结果”(如“手机/平板(不确定)”)。 4. 新设备管理模块(路由器端) 核心目标:精准判定新设备,管理未识别数据,触发更新机制。 新设备判定逻辑: 新设备类型 判定条件 处理策略 完全新设备 阶段1-2(厂商/类型)均为unknown,且规则无匹配 存储完整特征(加密),提示用户标注,符合条件时上传云端 已知厂商新型号 阶段1(厂商)置信度≥80%,但阶段3.2(型号)为unknown 存储系列/型号相关特征,优先上传至云端用于型号库扩展 已知系列新型号 阶段3.1(系列)置信度≥70%,但阶段3.2(型号)为unknown 仅在用户授权后上传,用于细化型号识别模型 本地临时规则生成: 用户手动标注的新设备(如“MAC=XX:XX:XX为小米扫地机器人”)自动转化为临时规则(有效期14天),存储在本地规则库(支持1000条,占用≤100KB)。 5. 本地资源调度模块(路由器端) 核心目标:控制CPU/RAM占用,确保不影响路由器主功能(路由转发、DHCP服务等)。 资源监控调度: 实时监控:每100ms采样一次CPU使用率(阈≤5%)、RAM占用(阈≤10MB); 动态降级: 高负载时(CPU>5%或RAM>10MB):暂停阶段3.2和阶段4,仅保留阶段1-3.1; 极端负载时(CPU>10%):仅保留阶段1(厂商识别),其他任务队列等待; 任务调度:识别任务优先分配至空闲CPU核心,避开主路由进程(如dnsmasq、hostapd)。 6. 用户交互反馈模块(路由器端) 核心功能:展示识别结果、接收用户修正、配置系统参数。 交互界面设计: 设备列表页:按MAC分组显示“厂商-类型-系列-型号-OS”及置信度(标红模糊结果); 修正入口:每个设备提供“识别错误?”按钮,支持手动修改任意字段; 系统设置: 数据上传开关(默认关闭,需用户手动开启); 识别精度/性能模式切换(高精度模式启用全阶段识别,性能模式仅保留阶段1-2)。 反馈处理:用户修正结果实时更新本地规则库,并标记为“高优先级特征”(用于后续模型推理时加权)。 7. 云端协同模块(云端+路由器端) 数据上传机制: 触发条件:用户授权+设备特征≥3个+路由器负载<30%(如凌晨3点); 上传内容:脱敏后的新设备特征(无原始MAC、无用户标识); 传输控制:单条数据≤1KB,每月上传量≤1MB。 云端模型训练: 数据聚合:每月聚合全球路由器上传的新设备特征(目标样本量≥10万条); 模型更新: 增量训练:冻结底层权重,仅更新分类器(避免灾难性遗忘); 规则库扩展:新增厂商/OUI映射(每季度前500新厂商)、型号正则(每月更新)。 模型压缩: 量化:将32位浮点数转为8位整数(体积减少75%); 剪枝:移除冗余神经元(保留95%精度),确保边缘端模型体积<5MB。 OTA推送更新: 推送策略:按路由器型号分组推送(如针对RAM<64MB的设备推送精简模型); 更新流程:路由器在负载<20%时下载增量包(<500KB)→ 校验完整性→ 替换旧模型→ 生效(无需重启)。
09-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值