本文整理汇总了C++中Pdu::get_vb_count方法的典型用法代码示例。如果您正苦于以下问题:C++ Pdu::get_vb_count方法的具体用法?C++ Pdu::get_vb_count怎么用?C++ Pdu::get_vb_count使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pdu
的用法示例。
在下文中一共展示了Pdu::get_vb_count方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: load_vbs
int wpdu::load_vbs(snmp_pdu *raw_pdu, const Pdu& pdu)
{
int status = 0;
// load up the payload
// for all Vbs in list, add them to the pdu
int vb_count;
Vb tempvb;
Oid tempoid;
SmiLPOID smioid;
SmiVALUE smival;
vb_count = pdu.get_vb_count();
for (int z = 0; z < vb_count; z++) {
pdu.get_vb( tempvb, z);
tempvb.get_oid( tempoid);
smioid = tempoid.oidval();
// what are we trying to convert here (vb oid part or value part)
status = convert_vb_to_smival( tempvb, &smival );
if ( status != SNMP_CLASS_SUCCESS)
return status;
// add the var to the raw pdu
cmu_snmp::add_var(raw_pdu, smioid->ptr, (int) smioid->len, &smival);
free_smival_descriptor( &smival);
}
return status;
}
示例2: handle_get
// callback : have received a Pdu from the target host with given read comm str
// this is really simplistic, but gives the general idea
int agent_impl::handle_get( Pdu &pdu, UdpTarget &target)
{
ACE_TRACE("agent_impl::handle_get");
OctetStr mgr_rd_str, agent_rd_str;
target.get_read_community(mgr_rd_str); // requster's read community string
tgt_.get_read_community(agent_rd_str); // this agent's read community string
// 1. verify we have a valid read string else drop pdu (no response to caller)
if (mgr_rd_str != agent_rd_str) {
ACE_DEBUG((LM_DEBUG, "agent_impl::handle_get: invalid read community recvd\n"));
return 0;
}
// 2. iterate over each varbind in the pdu, filling providing responses
int fdone = 0;
for (int i = 0; (i < pdu.get_vb_count()) && !fdone; i++) {
Vb vb;
pdu.get_vb(vb, i);
if (get_response(vb)) { // set a value for the oid if we can else
set_error_status(&pdu, SNMP_ERROR_NO_SUCH_NAME); // these ought to be member
set_error_index(&pdu, i); // functions but are not yet...
fdone++; // trigger flag to exit loop early
}
else // failed, return noSuch error
pdu.set_vb(vb, i);
}
// 3. lastly, return the pkt to the caller
return respond(pdu, target);
}
示例3: callback
void callback( int reason, Snmp *snmp, Pdu &pdu, SnmpTarget &target, void *cd)
{
Vb nextVb;
int pdu_error;
cout << "reason: " << reason << endl
<< "msg: " << snmp->error_msg(reason) << endl;
pdu_error = pdu.get_error_status();
if (pdu_error) {
cout << "Response contains error: "
<< snmp->error_msg(pdu_error)<< endl;
}
for (int i=0; i<pdu.get_vb_count(); i++)
{
pdu.get_vb(nextVb, i);
cout << "Oid: " << nextVb.get_printable_oid() << endl
<< "Val: " << nextVb.get_printable_value() << endl;
}
if (pdu.get_type() == sNMP_PDU_INFORM) {
cout << "pdu type: " << pdu.get_type() << endl;
cout << "sending response to inform: " << endl;
nextVb.set_value("This is the response.");
pdu.set_vb(nextVb, 0);
snmp->response(pdu, target);
}
cout << endl;
}
示例4: async_callback
void MainWindow::async_callback(int reason, Snmp * /*snmp*/, Pdu &pdu,
SnmpTarget &target)
{
Vb nextVb;
int pdu_error;
QString prefix_text;
QString notify_text;
push_button_get_next->setEnabled(true);
// What is the reason for this callback?
if (reason == SNMP_CLASS_NOTIFICATION)
{
prefix_text = "Trap: ";
// get the notify id for traps
Oid id;
pdu.get_notify_id(id);
notify_text = QString(" ID: %1 Type %2 -- ").arg(id.get_printable())
.arg(pdu.get_type());
}
else if (reason == SNMP_CLASS_ASYNC_RESPONSE)
{
prefix_text = "Response ";
}
else if (reason == SNMP_CLASS_TIMEOUT)
{
prefix_text = "Timeout ";
}
else
{
QString err = QString("\nDid not receive async response/trap: (%1) %2\n")
.arg(reason).arg(Snmp::error_msg(reason));
text_edit_output->append(err);
}
// Look at the error status of the Pdu
pdu_error = pdu.get_error_status();
if (pdu_error)
{
QString err = "\nResponse contains error:\n";
err += Snmp::error_msg(pdu_error);
text_edit_output->append(err);
return;
}
// The Pdu must contain at least one Vb
if (pdu.get_vb_count() == 0)
{
QString err = "\nPdu is empty\n";
text_edit_output->append(err);
return;
}
for (int i=0; i<pdu.get_vb_count(); i++)
{
// Get the Vb of the Pdu
pdu.get_vb(nextVb, i);
// Get Oid and value from the Vb and display it
line_edit_obj_id->setText(nextVb.get_printable_oid());
line_edit_value->setText(nextVb.get_printable_value());
text_edit_output->append(prefix_text +
target.get_address().get_printable() +
" -- " +
notify_text +
line_edit_obj_id->text() + " = " +
line_edit_value->text() + "\n");
}
// If we received a inform pdu, we have to send a response
if (pdu.get_type() == sNMP_PDU_INFORM)
{
text_edit_output->append("Sending response to inform.\n");
// just change the value of the first vb
pdu.get_vb(nextVb, 0);
nextVb.set_value("This is the response.");
pdu.set_vb(nextVb, 0);
snmp->response(pdu, target);
}
}
示例5: GetBulkRequest
int CSVBaseSNMP::GetBulkRequest(MonitorResult &ResultList)
{
WriteLog("\n\n*****************************");
WriteLog("GetBulkRequest!");
static const int BULK_BUFF = 10;
int nResult = 0;
char chPrvOID[MAX_BUFF_LEN] = {0};
bool bEnd = false;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
SnmpTarget *target;
if(version ==version3)
{//If SNMP Version Is 3
nResult = InitUTarget(); //Init UTarget
pdu.set_security_level( m_lSecurityLevel); //Set the Security Level portion of Pdu
pdu.set_context_name (m_szContextName); //Set the Context Name portion of Pdu
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;
//.........这里部分代码省略.........
示例6: snmpget
int snmpget(char *ipaddr, char *oid_in)
{
Snmp::socket_startup(); // Initialize socket subsystem
UdpAddress address(ipaddr);// make a SNMP++ Generic address
if (!address.valid())
{ // check validity of address
cout << "Invalid Address or DNS Name, " << ipaddr << "\n";
// usage();
}
snmp_version version = version1; // default is v1
int retries = 1; // default retries is 1
int timeout = 100; // default is 1 second
u_short port = 161; // default snmp port is 161
OctetStr community("public"); // community name
int status;
Snmp snmp(status, 0, (address.get_ip_version() == Address::version_ipv6));
if (status != SNMP_CLASS_SUCCESS) {
cout << "SNMP++ Session Create Fail, " << snmp.error_msg(status) << "\n";
return 1;
}
Oid oid("1.3.6.1.2.1.1.1.0"); // default is sysDescr
Pdu pdu;
Vb vb;
oid = oid_in;
if (!oid.valid()){
cout << "Oid " << oid_in << " is not valid" << endl;
return 1;
}
vb.set_oid(oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
address.set_port(port);
CTarget ctarget(address); // make a target using the address
ctarget.set_version(version); // set the SNMP version SNMPV1 or V2
ctarget.set_retry(retries); // set the number of auto retries
ctarget.set_timeout(timeout); // set timeout
ctarget.set_readcommunity(community); // set the read community name
SnmpTarget *target;
target = &ctarget;
status = snmp.get(pdu, *target);
if (status == SNMP_CLASS_SUCCESS)
{
for (int i = 0; i < pdu.get_vb_count(); i++)
{
pdu.get_vb(vb, i);
cout << "**************************" << endl;
cout << "VB nr: " << i << endl;
cout << "Oid = " << vb.get_printable_oid() << endl
<< "Value = " << vb.get_printable_value() << endl;
cout << "Syntax = " << vb.get_syntax() << endl;
if ((vb.get_syntax() == sNMP_SYNTAX_ENDOFMIBVIEW) ||
(vb.get_syntax() == sNMP_SYNTAX_NOSUCHINSTANCE) ||
(vb.get_syntax() == sNMP_SYNTAX_NOSUCHOBJECT))
cout << "Exception: " << vb.get_syntax() << " occured." << endl;
}
}
else
{
cout << "SNMP++ Get Error, " << snmp.error_msg(status)
<< " (" << status << ")" << endl;
}
Snmp::socket_cleanup(); // Shut down socket subsystem
return 0;
}
示例7: GetRequest
int CSVBaseSNMP::GetRequest(MonitorResult &ResultList)
{
WriteLog("\n\n*****************************");
WriteLog("GetRequest!");
int nResult = 0;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
SnmpTarget *target;
if(version == version3)
{//If SNMP Version Is 3
nResult = InitUTarget(); //Init UTarget
pdu.set_security_level( m_lSecurityLevel); //Set the Security Level portion of Pdu
pdu.set_context_name(m_szContextName); //Set the Context Name portion of Pdu
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
{
//cout << address << endl;
//cout << oid.get_printable() << endl;
if(m_pSnmp)
{
nResult = m_pSnmp->get( pdu,*target); //Get Reques
if(nResult != 0)
{//当有错误发生时候
m_szErrorMsg = m_pSnmp->error_msg(nResult);
return nResult;
}
for ( int 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)
{
SNMP_Monitor_Result result;
result.m_szOID = vb.get_printable_oid();
result.m_szValue = vb.get_printable_value();
size_t nPosition = result.m_szOID.rfind(".");
if(nPosition > 0)
{
result.m_szIndex = result.m_szOID.substr(nPosition);
result.m_szOID = result.m_szOID.substr(0, nPosition - 1);
}
WriteLog(result.m_szIndex.c_str());
WriteLog(result.m_szValue.c_str());
ResultList[i] = result;
}
else
{
m_szErrorMsg = "End of MIB Reached";
return -4;
}
}
}
}
catch(...)
{
DWORD dwError = GetLastError();
char szMsg[512] = {0};
int nlen = sprintf(szMsg, "Error Number is %08X --*GetRequest*---", dwError);
DumpLog("snmpmonitor-request", szMsg, nlen);
}
return nResult;
}
示例8: GetBulkRequest
/////////////////////////////////////////////////////////////////////////////
// 函数:GetBulkRequest //
// 说明:得到表格变量的结果 //
// 参数:无 //
// 返回值: //
// 成功返回0,否则返回一个非0 值 //
/////////////////////////////////////////////////////////////////////////////
int BasicSNMP::GetBulkRequest()
{
//puts("BasicSNMP::GetBulkRequest");
int nResult = 0;
char chPrvOID[MAX_BUFF_LEN] = {0};
bool bEnd = false;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
DestroyResultList();
SnmpTarget *target;// = &ctarget;
if(version ==version3)
{//If SNMP Version Is 3
nResult = InitUTarget();//Init UTarget
pdu.set_security_level( m_nSecurityLevel);//Set the Security Level portion of Pdu
pdu.set_context_name (contextName);//Set the Context Name portion of Pdu
pdu.set_context_engine_id(contextEngineID);//Set the Context Engine ID portion of Pdu
target = &utarget; //Set SNMP Target
}
else
{
target = &ctarget; //Set SNMP Target
}
OIDResult *pTemp = new OIDResult();
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)
{
//.........这里部分代码省略.........
示例9: 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() ) {
//.........这里部分代码省略.........
示例10: GetRequest
/////////////////////////////////////////////////////////////////////////////
// 函数:GetRequest //
// 说明:得到简单变量的结果 //
// 参数:无 //
// 返回值: //
// 成功返回0,否则返回一个非0 值 //
/////////////////////////////////////////////////////////////////////////////
int BasicSNMP::GetRequest()
{
static const char chFile[] = "smmpmonitor.log";
int nResult = 0;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
DestroyResultList();
SnmpTarget *target;// = &ctarget;
if(version ==version3)
{//If SNMP Version Is 3
nResult = InitUTarget();//Init UTarget
pdu.set_security_level( m_nSecurityLevel);//Set the Security Level portion of Pdu
pdu.set_context_name (contextName);//Set the Context Name portion of Pdu
pdu.set_context_engine_id(contextEngineID);//Set the Context Engine ID portion of Pdu
target = &utarget; //Set SNMP Target
}
else
{
target = &ctarget; //Set SNMP Target
}
OIDResult *pTemp = new OIDResult();//construct OIDResult Struct
pTemp->pNext = NULL;
pResult = pTemp;
try
{
nResult = pSnmp->get( pdu,*target);//Get Reques
if(nResult != 0)
{//当有错误发生时候
strcpy(chErrMsg, pSnmp->error_msg(nResult));
return nResult;
}
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)
{
//Set OIDResult Value
if(static_cast<int>(strlen(vb.get_printable_oid())) < MAX_BUFF_LEN)
strcpy(pTemp->chOID, vb.get_printable_oid());
if(static_cast<int>(strlen(vb.get_printable_value())) < MAX_BUFF_LEN)
{
strcpy(pTemp->chValue, vb.get_printable_value());
//pTemp->nLen = static_cast<int>(strlen(pTemp->chValue));
}
char *pdest = strrchr(pTemp->chOID, '.');
if(pdest)
{
(*pdest) = '\0';
pdest ++;
strcpy(pTemp->chIndex, pdest);
}
//if(pdest)
//{
// int nLast = (int)(pdest - pTemp->chOID + 1);
// memcpy(pTemp->chIndex, (pTemp->chOID)+nLast, strlen(pTemp->chOID) - nLast);
// pTemp->chIndex[strlen(pTemp->chOID) - nLast] = '\0';
//}
}
else
{
memset(chErrMsg, 0 , MAX_BUFF_LEN);
strcpy(chErrMsg, "End of MIB Reached");
return -4;
}
}
}
catch(...)
{
DWORD dwError = GetLastError();
char szMsg[512] = {0};
int nlen = sprintf(szMsg, "Error Number is %08X --*GetRequest*---", dwError);
DumpLog(chFile, szMsg, nlen);
//cout << "Error Number is " << dwError << "---*GetRequest*---" << endl;
}
return nResult;
}
示例11: GetNextRequest
/////////////////////////////////////////////////////////////////////////////
// 函数:GetNextRequest //
// 说明:以当前OID变量为开始,得到下一个简单变量的结果 //
// 参数:无 //
// 返回值: //
// 成功返回0,否则返回一个非0 值 //
/////////////////////////////////////////////////////////////////////////////
int BasicSNMP::GetNextRequest()
{
int nResult = 0;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
DestroyResultList();
SnmpTarget *target;// = &ctarget;
if(version ==version3)
{//If SNMP Version Is 3
nResult = InitUTarget();//Init UTarget
pdu.set_security_level( m_nSecurityLevel);//Set the Security Level portion of Pdu
pdu.set_context_name (contextName);//Set the Context Name portion of Pdu
pdu.set_context_engine_id(contextEngineID);//Set the Context Engine ID portion of Pdu
target = &utarget; //Set SNMP Target
}
else
{
target = &ctarget; //Set SNMP Target
}
OIDResult *pTemp = new OIDResult();
pTemp->pNext = NULL;
pResult = pTemp;
//SnmpTarget *target = &ctarget;
nResult = pSnmp->get_next( pdu,*target);
if(nResult != 0)
{//当有错误发生时候
strcpy(chErrMsg, pSnmp->error_msg(nResult));
}
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)
{
strcpy(pTemp->chOID, vb.get_printable_oid());
strcpy(pTemp->chValue,vb.get_printable_value());
//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);
pTemp->chIndex[strlen(pTemp->chOID) - nLast] = '\0';
oid = pTemp->chOID;
}
else
{
// memset(chErrMsg, 0 , MAX_BUFF_LEN);
// strcpy(chErrMsg, "End of MIB Reached");
return -4;
}
}
return nResult;
}
示例12: main_bulk_jun
//.........这里部分代码省略.........
ctarget.set_version( version); // set the SNMP version SNMPV1 or V2
ctarget.set_retry( retries); // set the number of auto retries
ctarget.set_timeout( timeout); // set timeout
ctarget.set_readcommunity( community); // set the read community name
#ifdef _SNMPv3
}
#endif
//-------[ issue the request, blocked mode ]-----------------------------
cout << "SNMP++ GetBulk to " << argv[1] << " SNMPV"
#ifdef _SNMPv3
<< ((version==version3) ? (version) : (version+1))
#else
<< (version+1)
#endif
<< " Retries=" << retries
<< " Timeout=" << timeout << "ms"
<< " Non Reptrs=" << non_reps
<< " Max Reps=" << max_reps << endl;
#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;
Pdu pdu2 = pdu;
if (( status = snmp.get_bulk( pdu,*target,non_reps,max_reps))== SNMP_CLASS_SUCCESS) {
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 << "Received a reportPdu: "
<< snmp.error_msg( tmp)
<< endl
<< vb.get_printable_oid() << " = "
<< vb.get_printable_value() << endl;
}
#endif
cout << "Oid = " << vb.get_printable_oid() << "\n";
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW) {
cout << "Value = " << vb.get_printable_value() << "\n\n";
}
else {
cout << "End of MIB view.\n\n";
}
}
}
else
cout << "SNMP++ GetBulk Error, " << snmp.error_msg( status) << "\n";
pdu = pdu2;
//--------------------
if (( status = snmp.get_bulk( pdu,*target,non_reps,max_reps))== SNMP_CLASS_SUCCESS) {
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 << "Received a reportPdu: "
<< snmp.error_msg( tmp)
<< endl
<< vb.get_printable_oid() << " = "
<< vb.get_printable_value() << endl;
}
#endif
cout << "Oid = " << vb.get_printable_oid() << "\n";
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW) {
cout << "Value = " << vb.get_printable_value() << "\n\n";
}
else {
cout << "End of MIB view.\n\n";
}
}
}
else
cout << "SNMP++ GetBulk Error, " << snmp.error_msg( status) << "\n";
//-------------
Snmp::socket_cleanup(); // Shut down socket subsystem
}
示例13: load
//.........这里部分代码省略.........
trapid.trim(1);
enterprise = trapid;
}
if ( raw_pdu->trap_type !=6)
pdu->get_notify_enterprise( enterprise);
if ( enterprise.len() >0) {
// note!!
// these are hooks into an SNMP++ oid
// and therefor the raw_pdu enterprise
// should not free them. null them out!!
SmiLPOID rawOid;
rawOid = enterprise.oidval();
raw_pdu->enterprise = rawOid->ptr;
raw_pdu->enterprise_length = (int) rawOid->len;
}
// timestamp
TimeTicks timestamp;
pdu->get_notify_timestamp( timestamp);
raw_pdu->time = ( unsigned long) timestamp;
}
// if its a v2 trap then we need to make a few adjustments
// vb #1 is the timestamp
// vb #2 is the id, represented as an Oid
if (( raw_pdu->command == sNMP_PDU_TRAP) ||
( raw_pdu->command == sNMP_PDU_INFORM))
{
Vb tempvb;
temppdu = *pdu;
temppdu.trim(temppdu.get_vb_count());
// vb #1 is the timestamp
TimeTicks timestamp;
tempvb.set_oid(SNMP_MSG_OID_SYSUPTIME); // sysuptime
pdu->get_notify_timestamp( timestamp);
tempvb.set_value ( timestamp);
temppdu += tempvb;
// vb #2 is the id
Oid trapid;
tempvb.set_oid(SNMP_MSG_OID_TRAPID);
pdu->get_notify_id( trapid);
tempvb.set_value( trapid);
temppdu += tempvb;
// append the remaining vbs
for (int z=0; z<pdu->get_vb_count(); z++) {
pdu->get_vb( tempvb,z);
temppdu += tempvb;
}
pdu = &temppdu; // reassign the pdu to the temp one
}
// load up the payload
// for all Vbs in list, add them to the pdu
int vb_count;
Vb tempvb;
Oid tempoid;
SmiLPOID smioid;
SmiVALUE smival;
vb_count = pdu->get_vb_count();
示例14: runable
void* runable(void *data) {
//--------[ build up SNMP++ object needed ]-------------------------------
ssync.lock();
printf("HELLO:%s\n", community.get_printable());
int t = *((int*)data);
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid("1"); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
CTarget ctarget(address[t]); // make a target using the address
#ifdef _SNMPv3
UTarget utarget(address[t]);
if (version == version3) {
utarget.set_version( version); // set the SNMP version SNMPV1 or V2 or V3
utarget.set_retry( retries); // set the number of auto retries
utarget.set_timeout( timeout); // set timeout
utarget.set_security_model( securityModel);
utarget.set_security_name( securityName);
pdu.set_security_level( securityLevel);
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 << "): "
//.........这里部分代码省略.........