本文整理汇总了C++中Pdu::set_vblist方法的典型用法代码示例。如果您正苦于以下问题:C++ Pdu::set_vblist方法的具体用法?C++ Pdu::set_vblist怎么用?C++ Pdu::set_vblist使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pdu
的用法示例。
在下文中一共展示了Pdu::set_vblist方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetBulkRequest
//.........这里部分代码省略.........
pdu.set_context_engine_id(m_szContextEngineID); //Set the Context Engine ID portion of Pdu
target = &m_Utarget; //Set SNMP Target
}
else
{
target = &m_Ctarget; //Set SNMP Target
}
try
{
if(m_pSnmp)
{
int nIndex = 0, i = 0;
while (( nResult = m_pSnmp->get_bulk(pdu, *target, 0, BULK_BUFF)) == SNMP_CLASS_SUCCESS)
{
if(bEnd)
break;
for (i = 0; i < pdu.get_vb_count(); i ++)
{
pdu.get_vb( vb, i);
if (pdu.get_type() == REPORT_MSG)
{
Oid tmp;
vb.get_oid(tmp);
return -5;
}
// look for var bind exception, applies to v2 only
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW)
{
string szOID = vb.get_printable_oid();
WriteLog(szOID.c_str());
int nPosition = static_cast<int>(szOID.find(m_szStartID));
if(nPosition < 0)
{
bEnd = true;
break;
}
if(static_cast<int>(strlen(chPrvOID)) > 0)
{//如果上次OID不为空
if(strcmp(vb.get_printable_oid(), chPrvOID) == 0)
{//比较OID名称是否相同,相同则退出循环
bEnd = true;
break;
}
}
//结果赋值
if(static_cast<int>(strlen(vb.get_printable_oid())) < MAX_BUFF_LEN)
strcpy(chPrvOID, vb.get_printable_oid());
SNMP_Monitor_Result result;
result.m_szOID = vb.get_printable_oid();
if(strcmp(result.m_szOID.substr(0,19).c_str(),"1.3.6.1.2.1.2.2.1.2")==0)
{
char str[100];
vb.get_value(str);
result.m_szValue=str;
WriteLog(str);
}
else
result.m_szValue = vb.get_printable_value();
//nPosition = static_cast<int>(result.m_szOID.find(m_szStartID.c_str()) + m_szStartID.length());
//if(nPosition > 0)
//{
result.m_szIndex = result.m_szOID.substr(m_szStartID.length() + 1);
result.m_szOID = result.m_szOID.substr(0, m_szStartID.length());
//PrintDebugString("index is " + result.m_szIndex);
//}
WriteLog(result.m_szIndex.c_str());
WriteLog(result.m_szValue.c_str());
ResultList[nIndex] = result;
nIndex ++;
}
else
{
m_szErrorMsg = "End of MIB Reached";
return -4;
}
}
// last vb becomes seed of next rquest
pdu.set_vblist(&vb, 1);
}
}
}
catch(...)
{
DWORD dwError = GetLastError();
char szMsg[512] = {0};
int nlen = sprintf(szMsg, "Error Number is %08X --*GetBulkRequest*---", dwError);
DumpLog("snmpmonitor-bulk.log", szMsg, nlen);
}
if(nResult == SNMP_ERROR_NO_SUCH_NAME)
{
nResult = 0;
}
return nResult;
}
示例2: GetBulkRequest
//.........这里部分代码省略.........
OIDResult *pPrevResult = pTemp;
//pTemp->pNext = NULL;
pResult = pTemp;
try
{
//SnmpTarget *target = &ctarget;
while (( nResult = pSnmp->get_next(pdu, *target))== SNMP_CLASS_SUCCESS)
{
if(bEnd)
{
break;
}
for ( int z=0;z<pdu.get_vb_count(); z++)
{
pdu.get_vb( vb,z);
if (pdu.get_type() == REPORT_MSG)
{
Oid tmp;
vb.get_oid(tmp);
return -5;
}
// look for var bind exception, applies to v2 only
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW)
{
char chOID[MAX_BUFF_LEN] = {0};
sprintf(chOID, "%s", vb.get_printable_oid());
char *pDest = strstr(chOID, chOIDStart);
if(pDest == NULL)
{//OID名称是否包含开始OID
bEnd = true;
break;
}
if(strlen(chPrvOID)>0)
{//如果上次OID不为空
if(strcmp(vb.get_printable_oid(), chPrvOID) == 0)
{//比较OID名称是否相同,相同则退出循环
bEnd = true;
break;
}
}
//结果赋值
strcpy(chPrvOID, vb.get_printable_oid());
strcpy(pTemp->chOID, vb.get_printable_oid());
strcpy(pTemp->chValue,vb.get_printable_value());
char *pIndex;
pIndex=pTemp->chOID+strlen(oid.get_printable())+1;
//pTemp->nLen = static_cast<int>(strlen(pTemp->chValue));
//char *pdest = strrchr(pTemp->chOID, '.');
//int nLast = (int)(pdest - pTemp->chOID + 1);
//memcpy(pTemp->chIndex, (pTemp->chOID)+nLast, strlen(pTemp->chOID) - nLast);
strcpy(pTemp->chIndex,pIndex);
//pTemp->chIndex[strlen(pTemp->chOID) - nLast] = '\0';
}
else
{
memset(chErrMsg, 0 , MAX_BUFF_LEN);
strcpy(chErrMsg, "End of MIB Reached");
return -4;
}
if(pTemp->pNext == NULL)
{
pPrevResult = pTemp;
pTemp->pNext = new OIDResult();
if(pTemp->pNext)
pTemp = pTemp->pNext;
//pTemp->pNext = NULL;
}
}
// last vb becomes seed of next rquest
pdu.set_vblist(&vb, 1);
}
if(nResult == 0)
{
if(pTemp->pNext == NULL)
{
free(pTemp);
pTemp = NULL;
pPrevResult->pNext = NULL;
}
}
}
catch(...)
{
DWORD dwError = GetLastError();
char szMsg[512] = {0};
int nlen = sprintf(szMsg, "Error Number is %08X --*GetBulkRequest*---", dwError);
DumpLog("snmpmonitor-bulk.log", szMsg, nlen);
//cout << "Error Number is " << dwError << "---*GetRequest*---" << endl;
}
if(nResult == SNMP_ERROR_NO_SUCH_NAME)
{
nResult = 0;
pPrevResult->pNext = NULL;
}
return nResult;
}
示例3: main
int main(int argc, char **argv)
{
int status;
char *req_str = (char*) "get";
// char *dflt_req_oid = (char*) sysDescr;
char *dflt_trp_oid = (char*) coldStart;
char *genAddrStr = (char*) "127.0.0.1" ; // localhost
char *oid_str = (char*) NULL;
if (argc > 1) genAddrStr = argv[1];
if (argc > 2) req_str = argv[2];
if (argc > 3) oid_str = argv[3];
Snmp::socket_startup(); // Initialize socket subsystem
IpAddress ipAddr(genAddrStr);
if (!ipAddr.valid()) {
cout << "Invalid destination: " << genAddrStr << endl;
return(1);
}
// bind to any port and use IPv6 if needed
Snmp snmp(status, 0, (ipAddr.get_ip_version() == Address::version_ipv6));
if (status) {
cout << "Failed to create SNMP Session: " << status << endl;
return(1);
}
cout << "Created session successfully" << endl;
CTarget target(ipAddr);
if (! target.valid()) {
cout << "Invalid target" << endl;
return(1);
}
Pdu pdu;
Vb vb;
if ( strcmp(req_str, "get") == 0 ) {
Vb vbl[NUM_SYS_VBS];
vbl[0].set_oid(sysDescr);
vbl[1].set_oid(sysObjectID);
vbl[2].set_oid(sysUpTime);
vbl[3].set_oid(sysContact);
vbl[4].set_oid(sysName);
vbl[5].set_oid(sysLocation);
// vbl[6].set_oid(sysServices);
cout << "Send a GET-REQUEST to: " << ipAddr.get_printable() << endl;
if ( ! oid_str ) {
if ( strcmp(genAddrStr,"localhost" ) == 0 ||
strcmp(genAddrStr, "127.0.0.1") == 0 ) {
pdu.set_vblist(vbl, NUM_SYS_VBS);
} else {
for (int i=0; i<NUM_SYS_VBS; i++)
pdu += vbl[i];
}
}
else {
Oid req_oid(oid_str);
if ( ! req_oid.valid() ) {
cout << "Request oid constructor failed for:" << oid_str << endl;
return(1);
}
vb.set_oid(req_oid);
pdu += vb;
}
status = snmp.get(pdu, target);
if (status) {
cout << "Failed to issue SNMP Get: (" << status << ") "
<< snmp.error_msg(status) << endl;
return(1);
}
else {
cout << "Issued get successfully" << endl;
int vbcount = pdu.get_vb_count();
if ( vbcount == NUM_SYS_VBS ) {
pdu.get_vblist(vbl, vbcount);
for ( int i=0; i<vbcount ; i++ ) {
cout << vbl[i].get_printable_oid() << " : " <<
vbl[i].get_printable_value() << endl;
}
} else {
for ( int i=0; i<vbcount ; i++ ) {
pdu.get_vb(vb, i);
cout << vb.get_printable_oid() << " : " <<
vb.get_printable_value() << endl;
}
}
}
}
else if ( strcmp(req_str, "trap") == 0 ) {
cout << "Send a TRAP to: " << ipAddr.get_printable() << endl;
if ( ! oid_str )
oid_str = dflt_trp_oid;
Oid notify_oid(oid_str);
if ( ! notify_oid.valid() ) {
//.........这里部分代码省略.........
示例4: runable
//.........这里部分代码省略.........
pdu.set_context_name (contextName);
pdu.set_context_engine_id(contextEngineID);
}
else {
#endif
ctarget.set_version( version); // set the SNMP version SNMPV1 or V2 or V3
ctarget.set_retry( retries); // set the number of auto retries
ctarget.set_timeout( timeout); // set timeout
ctarget.set_readcommunity( community); // set the read community to use
ctarget.set_writecommunity( community);
#ifdef _SNMPv3
}
#endif
//-------[ issue the request, blocked mode ]-----------------------------
cout << "(" << t << "): "
<< "SNMP++ snmpWalk to " << address[t].get_printable() << " SNMPV"
#ifdef _SNMPv3
<< ((version==version3) ? (version) : (version+1))
#else
<< (version+1)
#endif
<< " Retries=" << retries
<< " Timeout=" << timeout <<"ms";
#ifdef _SNMPv3
if (version == version3)
cout << endl
<< "securityName= " << securityName.get_printable()
<< ", securityLevel= " << securityLevel
<< ", securityModel= " << securityModel << endl
<< "contextName= " << contextName.get_printable()
<< ", contextEngineID= " << contextEngineID.get_printable()
<< endl;
else
#endif
cout << " Community=" << community.get_printable() << endl << flush;
SnmpTarget *target;
#ifdef _SNMPv3
if (version == version3)
target = &utarget;
else
#endif
target = &ctarget;
int status = 0;
int requests = 0;
int objects = 0;
ssync.unlock();
while (( status = snmp->get_bulk( pdu,*target,0,BULK_MAX))
== SNMP_CLASS_SUCCESS)
{
requests++;
ssync.lock();
for ( int z=0;z<pdu.get_vb_count(); z++) {
pdu.get_vb( vb,z);
#ifdef _SNMPv3
if (pdu.get_type() == REPORT_MSG) {
Oid tmp;
vb.get_oid(tmp);
cout << "(" << t << "): " << "Received a reportPdu: "
<< snmp->error_msg( tmp)
<< endl
<< vb.get_printable_oid() << " = "
<< vb.get_printable_value() << endl;
ssync.unlock();
return 0;
}
#endif
objects++;
// look for var bind exception, applies to v2 only
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW) {
cout << "(" << t << "): "
<< vb.get_printable_oid() << " = ";
cout << vb.get_printable_value() << "\n";
}
else {
cout << "(" << t << "): "
<< "End of MIB Reached\n";
cout << "(" << t << "): "
<< "Total # of Requests = " << requests << "\n";
cout << "(" << t << "): "
<< "Total # of Objects = " << objects << "\n";
ssync.unlock();
return 0;
}
}
ssync.unlock();
// last vb becomes seed of next rquest
pdu.set_vblist(&vb, 1);
}
if ( status != SNMP_ERROR_NO_SUCH_NAME)
cout << "(" << t << "): "
<< "SNMP++ snmpWalk Error, " << snmp->error_msg( status) << "\n";
cout << "(" << t << "): "
<< "Total # of Requests = " << requests << "\n";
cout << "(" << t << "): "
<< "Total # of Objects = " << objects << "\n";
return 0;
} // end Walk