# BER编解码器 **Repository Path**: yeliangcheng1024/ber ## Basic Information - **Project Name**: BER编解码器 - **Description**: 一个不成熟的BER编解码器。用于对SNMP数据报文进行编解码。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-05-30 - **Last Updated**: 2024-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BER编解码器 #### 介绍 ​ 一个不成熟的BER编解码器。用于对SNMP报文进行编解码。简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议。在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本。该程序仅实现了SNMPv1的部分编解码。 ## 软件设计思路 * 该程序采用面向对象语言--JAVA进行实现。 1. 构建SNMP数据包对像(message)、设置版本号(version)、团体名(community),协议数据单元对像三个属性(PDU); 2. 构建协议数据单元对像(PDU),设置PDU类型(pduType)、请求标识(requestId)、错误状态(errorStatus)、错误索引(errorIndex)、以及变量绑定表对象(variableBindings)五个属性,由于时间精力有限,并未对Trap报文进行处理,该程序仅能处理get-request、get-next-request、get-response、set-request四种报文; 3. 构建变量绑定表对象(variableBindings),设置变量名(objectName),值类型(valueType)以及变量值(value)三个属性; 4. 构建TagType对象,存储标签值与其对应的类型,用于编码和解码。 5. 编码模块:分别创建INTEGER、BOOLEAN等类型值进行BER编码的方法,返回对应TLV的byte数组,最后拼接成一个SNMP报文数组; 6. 解码模块:创建INTEGER、BOOLEAN等类型值进行BER解码的方法,返回解析后的值,并存入Message对象,最后输出字符串。 7. 数据收发模快:将编码后的SNMP报文数组封装进UDP数据包中,向服务端发送数据,服务端收到数据后对其解析并打印字段对应值。 ## 运行说明 ​ 在Test包下的测试类,可以直接测试编码和解码功能。 ​ 或在Manager包下测试编码后的数据是否能成功通过UDP协议发送。先开启UDPServer准备接收数据,在UDPClient中发送SNMP数据包,在UDPClient中可以显示所发送的SNMP数据包编码后的十六进制与二进制形式,在UDPServer中可以显示解析后的SNMP数据包。Manager包下仅仅只有数据包的收发功能用于测试BER编解码功能,并无实际Manger的功能。