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

Writing a getBulkRequest function using SNMPv2 and c++

本文关键字:getBulkRequest 函数 编写 c++ SNMPv2 使用      更新时间:2023-10-16

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

现在,我想做一些简单的事情,使用GetBulkRequest通过在GetBulkRequest中将"非重复"设置为"0"来顺序地获取NextRequest。

  • 我写的格式正确吗
  • 对于Oid,我只需要输入一个Oid(批量的第一个项目)吗
  • 如果我希望从指定的Oid开始获得批量请求,并且在第一个Oid之后有以下4个项目,我是否只需将"最大重复次数"设置为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的格式正确吗?

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

Q:对于Oid,我只需要输入一个Oid(Bulk的第一个项目)吗?

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

Q: 如果我希望从所述Oid开始获得批量请求,并且在第一个Oid之后有以下4个项目,我是否只需将"最大重复次数"设置为5?

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

希望得到帮助。