首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用getBulkRequest和SNMPv2编写一个c++函数

使用getBulkRequest和SNMPv2编写一个c++函数
EN

Stack Overflow用户
提问于 2016-06-14 01:28:26
回答 1查看 96关注 0票数 1

我正在编写一个getBulkRequest函数,它允许我一次请求一个信息列表。

现在,我想做一些简单的事情,通过在getBulkRequest中将“不重复”设置为"0“,从而使用getNextRequest对getNextRequest进行顺序设置。

  • 我写的格式正确吗?
  • 对于Oid,我是否只需要输入一个Oid(批量的第一项)?
  • 如果我希望从指定的Oid开始获得批量请求,并且在第一项之后得到以下4项,那么我是否只是将“最大重复次数”设置为5?

这是我正在使用的格式,有人能告诉我我做得对不对:

代码语言:javascript
复制
switch(pdyType) {
 case PdyType::GET_BULK_REQUEST:
for (QStringList::ConstIterator iter = oids.begin(); iter != oids.end(); ++iter)
{

  QByteArray keyHolder;

  //value
  keyHolder.push_front(QByteArray(1, 0x00));
  keyHolder.push_front(QByteArray(1, DataType::DATA_NULL));

  //object identifier
  QByteArray temp = encodeoid(*iter);
  keyHolder.push_front(temp);
  keyHolder.push_front(encodeLengthField(temp.size()));
  keyHolder.push_front(QByteArray(1, DataType::OBJECT_ID));

  //varbind
  keyHolder.push_front(encodeLengthField(keyHolder.size()));
  keyHolder.push_front(QByteArray(1, DataType::SEQUENCE));

  datagram.push_front(keyHolder);
}

//max-repetitions
datagram.push_front(QByteArray(1, 5);
datagram.push_front(QByteArray(1, 1);
datagram.push_front(QByteArray(1, DataType::INTEGER);

//varbind list
datagram.push_front(QByteArray(encodeLengthField(datagram.size());
datagram.push_front(QByteArray(1, DataType::SEQUENCE);

//non-repeaters
datagram.push_front(QByteArray(1, 0);
datagram.push_front(QByteArray(1, 1);
datagram.push_front(QByteArray(1, DataType::INTEGER);

//requestId
datagram.push_front(QByteArray(1, requestId));
datagram.push_front(QByteArray(1, 1);
datagram.push_front(QByteArray(1, DataType::INTEGER);

//pdu
datagram.push_front(QByteArray(encodeLengthField(datagram.size()));
datagram.push_front(QByteArray(1, (unsigned char)pduType);

//community string
datagram.push_front(QByteArray(community.toLocal8Bit()));
datagram.push_front(QByteArray(encodeLengthField(community.size());
datagram.push_front(QByteArray(1, DataType::OCTET_STRING);

//version
datagram.push_front(QByteArray(1, 0));
datagram.push_front(QByteArray(1, 1);
datagram.push_front(QByteArray(1, DataType::INTEGER);

//message type
datagram.push_front(QByteArray(encodeLengthField(datagram.size()));
datagram.push_front(QByteArray(1, DataType::SEQUENCE);
break;


default:
 break;
 }
 return datagram;

通过QUdpSocket::writeDatagram设置getBulkRequest的格式正确吗?

我希望我能把我的问题说清楚。因为我不太清楚目前发生了什么,并试图读得更多。

EN

回答 1

Stack Overflow用户

发布于 2016-07-19 09:43:37

问:对于Oid,我是否只需要输入一个Oid(批量的第一项)?

是的,你只需要设置第一个OID就行了。

问:如果我希望从所述的Oid开始获得大量请求,并且在第一项之后得到以下4项,我是否只是将“最大重复次数”设置为5?

答:是的。5是为最大重复设置的最小值,但可以设置为更大的值(例如10)。您处理响应的方式是遍历响应PDU并每次提取每个OID。

希望能帮上忙。

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

https://stackoverflow.com/questions/37801580

复制
相关文章

相似问题

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