使用SNMPv2和c ++编写getBulkRequest函数

时间:2016-06-14 01:28:26

标签: c++ qt format snmp

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

现在,我想做一些简单的事情,使用GetBulkRequest通过在getBulkRequest中将“Non-Repetition”设置为“0”来顺序getNextRequest。

  • 我是否正确撰写了格式?
  • 对于Oid,我只需要输入ONE Oid(批量的第一项)吗?
  • 如果我希望从所述的Oid开始收到批量请求,并在第一项之后获得以下4项,我是否只需将“Max-Repetition”设置为5?

这是我正在使用的格式,任何人都可以告诉我我是否做得对:

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的格式是否正确?

我希望我能清楚地说出我的问题。因为我不太确定目前发生了什么,并试图阅读更多内容。

1 个答案:

答案 0 :(得分:0)

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

答:是的,您只需要设置第一个OID。

问:如果我希望从所述的Oid开始批量请求,并且在第一个之后获得以下4个项目,我是否只需设置" Max-Repetition"到5?

答:是的。 5是您需要为最大重复次数设置的最小值,但您可以设置为更大的值(例如10)。处理响应的方法是遍历响应PDU并一次输出每个OID。

希望得到这个帮助。