⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmp探测代码.txt

📁 可以对黑客编程有一定的了解
💻 TXT
📖 第 1 页 / 共 3 页
字号:




/**************************************************************/ 

// 工具函数 

// 

/**************************************************************/ 

int GetSelfIp(CString strIp[]) 

{ 

int nCount = 0; 

WORD wversionrequested; 

WSADATA wsadata; 

char name[255]; 

wversionrequested = MAKEWORD( 2, 0 ); 

//调用WinSock2功能之前必须调用WSAStartup 

if ( WSAStartup( wversionrequested, &wsadata ) == 0 ) 

{ 

if( gethostname ( name, sizeof(name)) == 0) 

{ 

PHOSTENT hostinfo; 

hostinfo = gethostbyname(name); 

for(int i = 0; hostinfo!= NULL && hostinfo->h_addr_list[i] != NULL; i++ ) 

{ 

strIp[i] = inet_ntoa (*(struct in_addr *)hostinfo->h_addr_list[i]); 

nCount++; 

} 

} 

WSACleanup( ); 

} 

return nCount; 

} 



SNMPAPI_STATUS convertString2smiValue(smiLPVALUE value, TCHAR *buffer) 

{ 

SNMPAPI_STATUS rv = SNMPAPI_SUCCESS; 

TCHAR *ts; 

int i, n; 

smiOID tOid; 

smiUINT32 tOidVal[MAXOBJIDSTRSIZE]; 

smiVALUE tValue; 

smiBYTE tValueVal[500]; 

DWORD dwi; 



switch (value->syntax) { 

case SNMP_SYNTAX_INT: 

// case SNMP_SYNTAX_INT32: 

value->value.sNumber = _ttol(buffer); 

break; 

case SNMP_SYNTAX_UINT32: 

case SNMP_SYNTAX_CNTR32: 

case SNMP_SYNTAX_GAUGE32: 

value->value.uNumber = _tcstoul(buffer, NULL, 10); 

break; 

case SNMP_SYNTAX_TIMETICKS: 

value->value.uNumber = _tcstoul(buffer, NULL, 10); 

break; 

case SNMP_SYNTAX_CNTR64: 

// To do! 

_stscanf(buffer, _TEXT("%08x.%08x"), 

value->value.hNumber.hipart, 

value->value.hNumber.lopart); 

break; 

case SNMP_SYNTAX_OCTETS: 

#if defined(__BORLANDC__) 

value->value.string.len = _tcslen(buffer); 

#else 

value->value.string.len = _tcsclen(buffer); 

#endif 

value->value.string.ptr = (smiBYTE *) malloc(value->value.string.len * sizeof(smiBYTE)); 

ts = buffer; 

for (dwi = 0; dwi < value->value.string.len; dwi++) { 

*(value->value.string.ptr + dwi) = (BYTE) *ts++; 

} 

break; 

case SNMP_SYNTAX_BITS: 

case SNMP_SYNTAX_OPAQUE: 

case SNMP_SYNTAX_IPADDR: 

tValue.syntax = value->syntax; 

tValue.value.string.len = 0; 

tValue.value.string.ptr = tValueVal; 

ts = buffer; 

for (n = 0; n < 4; n++) { 

if (_stscanf(ts, _TEXT("%d"), &i) == 0) { 

rv = SNMPAPI_FAILURE; 

break; 

} 

tValue.value.string.len++; 

tValue.value.string.ptr[n] = (BYTE) i; 

while ((*ts != TCHAR('.')) && (*ts != TCHAR('\0'))) 

ts++; 

if (*ts == TCHAR('\0')) break; 

ts++; // One more for the first digit 

if (*ts == TCHAR('\0')) break; 

} 

if (n != 3) { 

rv = SNMPAPI_FAILURE; 

break; 

} 

// Allocate memory for value.oid value and copy oid 

// leave syntax unchanged 

value->value.string.ptr = (smiBYTE *) malloc(tValue.value.string.len * sizeof(smiBYTE)); 

if (value->value.string.ptr) { 

value->value.string.len = tValue.value.string.len; 

memcpy(value->value.string.ptr, tValue.value.string.ptr, tValue.value.string.len * sizeof(smiBYTE)); 

} 

else { 

rv = SNMPAPI_FAILURE; 

} 

break; 

case SNMP_SYNTAX_NSAPADDR: 

break; 

case SNMP_SYNTAX_OID: 

// Use SnmpStrToOid ... 

tOid.len = 0; 

tOid.ptr = &tOidVal[0]; 

value->value.oid.len = 0; 

n = 0; 

ts = buffer; 

while (1) { 

if (_stscanf(ts, _TEXT("%d"), &i) == 0) { 

rv = SNMPAPI_FAILURE; 

break; 

} 

tOid.len++; 

tOid.ptr[n++] = i; 

while ((*ts != TCHAR('.')) && (*ts != TCHAR('\0'))) 

ts++; 

if (*ts == TCHAR('\0')) break; 

ts++; // One more for the first digit 

if (*ts == TCHAR('\0')) break; 

} 

if (rv != TRUE) 

break; 

// Allocate memory for value.oid value and copy oid 

value->value.oid.ptr = (smiUINT32 *) malloc(tOid.len * sizeof(smiUINT32)); 

if (value->value.oid.ptr) { 

value->value.oid.len = tOid.len; 

memcpy(value->value.oid.ptr, tOid.ptr, tOid.len * sizeof(smiUINT32)); 

} 

else { 

rv = SNMPAPI_FAILURE; 

} 

break; 

case SNMP_SYNTAX_NULL: 

case SNMP_SYNTAX_NOSUCHOBJECT: 

case SNMP_SYNTAX_NOSUCHINSTANCE: 

case SNMP_SYNTAX_ENDOFMIBVIEW: 

value->value.empty = 0; 

break; 

default: 

rv = SNMPAPI_FAILURE; 

break; 

} 

//-----------------释放资源 



//-------------------- 

return rv; 

} 



//------------------------------- 

//名称:ShowInfoBox 

//描述:显示TRAP包中信息的对话框 

//------------------------------- 

void ShowInfoBox(CTrapPduInfo saveTrapInfo) 

{ 

CString str, strTrapVer, strAgentIp; 

CString strError; 

char szOid[MAXOBJIDSTRSIZE]; 

char szBindOid[MAXOBJIDSTRSIZE]; 

//------------------------------------- 

strAgentIp = "代理IP地址为:"; 

strAgentIp += saveTrapInfo.szSourceIp; 

strAgentIp += "\n"; 

//----------------------------------------- 

switch(saveTrapInfo.nPduType) 

{ 

case SNMP_PDU_V1TRAP : 

strTrapVer = "接收到的Trap包格式为:V1格式的TRAP包\n\n"; 

break; 

case SNMP_PDU_TRAP: 

strTrapVer = "接收到的Trap包格式为:V2格式的TRAP包\n\n"; 

break; 

} 

int nCount = 0; 

int nOidNumber = 0; 

CString strSubInfo[MAX_VBL]; 

nCount = saveTrapInfo.nVblCount; 

CString strOid, strAllOid = "", strTimeTick, strEnterpriseOid; 

memset(szOid, 0, MAXOBJIDSTRSIZE); 

for (int i = 1; i <= saveTrapInfo.nVblCount; i++) 

{ 

memset(szBindOid, 0, MAXOBJIDSTRSIZE); 

::SnmpOidToStr(&saveTrapInfo.vblOid[i - 1], MAXOBJIDSTRSIZE, szBindOid); 

//--------------------------------------------------------------- 

switch(saveTrapInfo.vblValue[i - 1].syntax) 

{ 

case SNMP_SYNTAX_INT: 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含了数字(INT)信息:%d\n", 

i, szBindOid, 

saveTrapInfo.vblValue[i - 1].value.sNumber); 

break; 

//------------------------------------------ 

case SNMP_SYNTAX_BITS : 

memset(szOid, 0, MAXOBJIDSTRSIZE); 

memcpy(szOid, saveTrapInfo.vblValue[i - 1].value.string.ptr, 

saveTrapInfo.vblValue[i - 1].value.string.len); 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含的比特串(BITS)信息:%s\n", 

i, szBindOid, szOid); 

break; 

case SNMP_SYNTAX_OCTETS :// 

memset(szOid, 0, MAXOBJIDSTRSIZE); 

memcpy(szOid, saveTrapInfo.vblValue[i - 1].value.string.ptr, 

saveTrapInfo.vblValue[i - 1].value.string.len); 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含的字符串(OCTETS)信息:%s\n", 

i, szBindOid, szOid); 

break; 

case SNMP_SYNTAX_OID : 

memset(szOid, 0, MAXOBJIDSTRSIZE); 

::SnmpOidToStr(&saveTrapInfo.vblValue[i - 1].value.oid, MAXOBJIDSTRSIZE, szOid); 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含的OID信息为:%s\n", 

i, szBindOid, szOid); 

if(i == 2) 

{ 

if(saveTrapInfo.genericTrap == 6) 

{ 

strError.Format("一般陷阱代码为:%d\n特殊陷阱代码为:%d\n", 

saveTrapInfo.genericTrap, saveTrapInfo.specificTrap); 

} 

else 

{ 

strError.Format("一般陷阱代码为:%d\n", 

saveTrapInfo.genericTrap); 

} 

} 

if(i == nCount) 

{ 

strEnterpriseOid.Format("产生陷阱的网络设备的对象标识为:%s\n", szOid); 

} 

break; 

case SNMP_SYNTAX_IPADDR : 

memset(szOid, 0, MAXOBJIDSTRSIZE); 

memcpy(szOid, saveTrapInfo.vblValue[i - 1].value.string.ptr, 

saveTrapInfo.vblValue[i - 1].value.string.len); 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含的IP地址信息为:%s\n", 

i, szBindOid, szOid); 

break; 

//--------------------------------------------- 

case SNMP_SYNTAX_CNTR32 : 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含了CNTR32的记数变量:%d\n", 

i, szBindOid, saveTrapInfo.vblValue[i - 1].value.uNumber); 

break; 

case SNMP_SYNTAX_TIMETICKS : 

strTimeTick.Format("时间戳信息为:%d(秒)\n****************************************\n", 

saveTrapInfo.dwTimeTicks/100); 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含了时间戳信息为:%d(秒)\n", 

i, szBindOid, saveTrapInfo.dwTimeTicks/100); 

break; 

case SNMP_SYNTAX_OPAQUE : 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含了OPAQUE信息:%u\n", 

i, szBindOid, saveTrapInfo.vblValue[i - 1].value.uNumber); 

break; 

case SNMP_SYNTAX_UINT32 : 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含了UINT32信息:%u\n", 

i, szBindOid, saveTrapInfo.vblValue[i - 1].value.uNumber); 

break; 

//--------------------------------------- 

case SNMP_SYNTAX_CNTR64 : 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含了CNTR64信息:%x.%x\n", 

i, szBindOid, saveTrapInfo.vblValue[i - 1].value.hNumber.hipart, 

saveTrapInfo.vblValue[i - 1].value.hNumber.lopart); 

break; 

//------------------------------------- 

case SNMP_SYNTAX_GAUGE32 : 

strSubInfo[nOidNumber++].Format("第 %d 个VBlist(OID:%s)中包含了GAUGE32信息:%u\n", 

i, szBindOid, saveTrapInfo.vblValue[i - 1].value.uNumber); 

break; 

case SNMP_SYNTAX_NULL : 

AfxMessageBox("SNMP_SYNTAX_NULL"); 

break; 

case SNMP_SYNTAX_NOSUCHOBJECT : 

AfxMessageBox("SNMP_SYNTAX_NOSUCHOBJECT"); 

break; 

case SNMP_SYNTAX_NOSUCHINSTANCE : 

AfxMessageBox("SNMP_SYNTAX_NOSUCHINSTANCE"); 

break; 

case SNMP_SYNTAX_ENDOFMIBVIEW : 

AfxMessageBox("SNMP_SYNTAX_ENDOFMIBVIEW"); 

break; 

//------------------------------------ 

default: 

AfxMessageBox("没有可用信息"); 

break; 

} 

} 

//-------------------------------- 

strOid.Format("共用体名称为:%s\n", saveTrapInfo.szCommunity); 

str += strTrapVer + strEnterpriseOid + strAgentIp + strError + strTimeTick; 

for(i = 0; i < nOidNumber; i++) 

{ 

str += strSubInfo[i]; 

} 

str += strAllOid + strOid; 

AfxMessageBox(str); 

} 



/* 

//具体的错误状态 

switch(errorStatus) 

{ 

case SNMP_ERROR_NOERROR: 

AfxMessageBox("SNMP_ERROR_NOERROR"); 

break; 

case SNMP_ERROR_TOOBIG : 

AfxMessageBox("SNMP_ERROR_TOOBIG"); 

break; 

case SNMP_ERROR_NOSUCHNAME: 

AfxMessageBox("SNMP_ERROR_NOSUCHNAME"); 

break; 

case SNMP_ERROR_BADVALUE : 

AfxMessageBox("SNMP_ERROR_BADVALUE"); 

break; 

case SNMP_ERROR_READONLY : 

AfxMessageBox("SNMP_ERROR_READONLY"); 

break; 

case SNMP_ERROR_GENERR : 

AfxMessageBox("SNMP_ERROR_GENERR"); 

break; 

case SNMP_ERROR_NOACCESS : 

AfxMessageBox("SNMP_ERROR_NOACCESS"); 

break; 

case SNMP_ERROR_WRONGTYPE : 

AfxMessageBox("SNMP_ERROR_WRONGTYPE"); 

break; 

case SNMP_ERROR_WRONGLENGTH : 

AfxMessageBox("SNMP_ERROR_WRONGLENGTH"); 

break; 

case SNMP_ERROR_WRONGENCODING : 

AfxMessageBox("SNMP_ERROR_WRONGENCODING"); 

break; 

case SNMP_ERROR_NOCREATION : 

AfxMessageBox("SNMP_ERROR_NOCREATION"); 

break; 

case SNMP_ERROR_INCONSISTENTVALUE: 

AfxMessageBox("SNMP_ERROR_INCONSISTENTVALUE"); 

break; 

case SNMP_ERROR_RESOURCEUNAVAILABLE : 

AfxMessageBox("SNMP_ERROR_RESOURCEUNAVAILABLE"); 

break; 

case SNMP_ERROR_COMMITFAILED : 

AfxMessageBox("SNMP_ERROR_COMMITFAILED"); 

break; 

case SNMP_ERROR_UNDOFAILED : 

AfxMessageBox("SNMP_ERROR_UNDOFAILED"); 

break; 

case SNMP_ERROR_AUTHORIZATIONERROR : 

AfxMessageBox("SNMP_ERROR_AUTHORIZATIONERROR"); 

break; 

case SNMP_ERROR_NOTWRITABLE : 

AfxMessageBox("SNMP_ERROR_NOTWRITABLE"); 

break; 

case SNMP_ERROR_INCONSISTENTNAME : 

AfxMessageBox("SNMP_ERROR_INCONSISTENTNAME"); 

break; 

default: 

AfxMessageBox("成功"); 

break; 

} 



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -