首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >snmp服务器如何对请求数据包进行编码?

snmp服务器如何对请求数据包进行编码?
EN

Stack Overflow用户
提问于 2016-10-08 23:06:37
回答 1查看 408关注 0票数 0

我正在端口161上编写一个snmp服务器,它只显示5颗星,我可以通过snmpget命令行获得星号,也可以通过snmpset设置它们。当我收到字符串形式的请求包时,我无法将其编码为可读。snmp数据包格式以整数开头表示版本,然后是八位字节字符串,依此类推...

代码语言:javascript
运行
复制
public class MyServer {
    public static void main(String[] args) throws Exception

{ DatagramSocket套接字=新的DatagramSocket(161);

代码语言:javascript
运行
复制
byte[] buffer = new byte[64];
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

while(true)
{

socket.receive(packet);
byte[] data = packet.getData();


String s=new String(data,"UTF-8");
System.out.println(s+"\t"+packet.getAddress()+"\t"+packet.getPort());

输出像这样,但更奇怪!

0‘公共?<\

EN

回答 1

Stack Overflow用户

发布于 2016-10-13 16:19:14

SNMP协议并不像其他协议那样简单。事实上,这是实现和使用的最复杂的协议之一。

构造SNMP消息需要对ASN.1指定的数据类型有一定的了解。ASN.1基元数据类型包括整数、八位字节(字节、字符)字符串、空值、布尔值和对象标识符。对象标识符类型是SNMP消息的核心,因为对象标识符类型的字段保存用于在SNMP代理中寻址参数的OID。为了扩展程序员组织数据的能力,ASN.1允许将原始数据类型组合到复杂数据类型中。

ASN.1提供了构建SNMP消息所需的几种复杂数据类型。序列是一种复杂的数据类型。序列只是一个数据字段的列表。序列中的每个字段可以具有不同的数据类型。ASN.1还定义了SNMP PDU (协议数据单元)数据类型,这是特定于SNMP的复杂数据类型。PDU字段包含SNMP消息的正文。两种可用的PDU数据类型是GetRequest和SetRequest,它们分别保存获取和设置参数所需的所有数据。归根结底,SNMP消息是完全由ASN.1数据类型的字段构建的结构。但是,仅指定正确的数据类型是不够的。如果SNMP消息是具有不同数据类型的字段序列,则收件人如何知道一个字段的结束位置和另一个字段的开始位置,或者每个字段的数据类型?通过遵守基本编码规则(BER)来避免这些问题。最基本的规则是每个字段编码为三个部分:类型、长度和值(TLV)。Type使用单字节标识符指定字段的数据类型。Length指定以下Value部分的字节长度,Value是传递的实际值(数字、字符串、OID等)。

所以请不要重复发明轮子,因为有几个写得很好的库完全按照标准实现了SNMPv1、SNMPv2C和SNMPv3。它们是NET-SNMPSNMP4J和其他一些。使用它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39933927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档