首页 / C++ / vc++实现SNMP信息刺探程序
vc++实现SNMP信息刺探程序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了vc++实现SNMP信息刺探程序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4799字,纯文字阅读大概需要7分钟。
内容图文
![vc++实现SNMP信息刺探程序](/upload/InfoBanner/zyjiaocheng/590/31a2c353c2c24a1c85817fe64d806964.jpg)
vc++实现SNMP信息刺探程序
/*---------------------------------------
SNMP信息刺探程序
----------------------------------------*/
#include
#define TIMEOUT 6000 /* milliseconds */
#define RETRIES 3
//一些有用的oid
char *SnmpOid[5]={".1.3.6.1.2.1.25.4.2.1.2",//进程列表
".1.3.6.1.4.1.77.1.2.25.1.1",//系统用户
".1.3.6.1.4.1.77.1.4.1.0",//域名
".1.3.6.1.2.1.25.6.3.1.2",//列出安装的软件
".1.3.6.1.2.1.1"};// 列出系统信息
void usage(char *name)
{
printf("=================SNMP tool================/n");
printf("=======gxisone@hotmail.com 2004/8/10====/n");
printf("/nusage: %s [remoteip] [sysprocess|sysuser|domainname|sysinf|software]/n",name);
printf("Exameple: %s 192.168.1.1 sysuser/n",name);
}
int main(int argc,char *argv[])
{
int operation;
LPSTR agent;
LPSTR community;
RFC1157VarBindList variableBindings;
LPSNMP_MGR_SESSION session;
int timeout = TIMEOUT;
int retries = RETRIES;
int i;
BYTE requestType;
AsnInteger errorStatus;
AsnInteger errorIndex;
char *chkPtr = NULL;
operation = WALK; //这个程序使用WALK来获取信息
if (argc != 3)
{
usage(argv[0]);
return 0;
}
else
{
AsnObjectIdentifier reqObject;
// 取得IP地址
agent = (LPSTR)SNMP_malloc(strlen(*argv) + 1);
strcpy(agent, argv[1]);
community="public";//设置查询密码
variableBindings.list = NULL;
variableBindings.len = 0;
// 设置 oid
if(!strcmp(argv[2],"sysprocess"))i=0;
else if(!strcmp(argv[2],"sysuser"))i=1;
else if(!strcmp(argv[2],"domainname"))i=2;
else if(!strcmp(argv[2],"software"))i=3;
else if(!strcmp(argv[2],"sysinf"))i=4;
else{
usage(argv[0]);
return 0;
}
printf("%s/n",SnmpOid[i]);
// 把字符串转换成标准oid
if (!SnmpMgrStrToOid(SnmpOid[i], &reqObject))
{
printf("Error: Invalid oid, %s, specified./n", *argv);
return 1;
}
else
{
variableBindings.len++;
if ((variableBindings.list = (RFC1157VarBind *)SNMP_realloc(
variableBindings.list, sizeof(RFC1157VarBind) *
variableBindings.len)) == NULL)
{
printf("Error: Error allocating oid, %s./n",*argv);
return 1;
}
variableBindings.list[variableBindings.len - 1].name=reqObject;
variableBindings.list[variableBindings.len - 1].value.asnType=ASN_NULL;
}
// Make sure only one variable binding was specified if operation
// is WALK.
if (operation == WALK && variableBindings.len != 1)
{
printf("Error: Multiple oids specified for WALK./n");
return 1;
}
// Establish a SNMP session to communicate with the remote agent. The
// community, communications timeout, and communications retry count
// for the session are also required.
if ((session = SnmpMgrOpen(agent, community, timeout, retries)) == NULL)
{
printf("error on SnmpMgrOpen %d/n", GetLastError());
return 1;
}
} // end if
{
AsnObjectIdentifier root;
AsnObjectIdentifier tempOid;
SnmpUtilOidCpy(&root, &variableBindings.list[0].name);
requestType = ASN_RFC1157_GETNEXTREQUEST;
for(;;)
{
if (!SnmpMgrRequest(session, requestType, &variableBindings,
&errorStatus, &errorIndex))
{
printf("error on SnmpMgrRequest %d/n", GetLastError());
break;
}
else
{
if (errorStatus == SNMP_ERRORSTATUS_NOSUCHNAME ||
SnmpUtilOidNCmp(&variableBindings.list[0].name,
&root, root.idLength))
{
printf("End of MIB subtree./n/n");
break;
}
if (errorStatus > 0)
{
printf("Error: errorStatus=%d, errorIndex=%d /n", errorStatus, errorIndex);
break;
}
else
{
// 打印查询的结果
char *string = NULL;
SnmpMgrOidToStr(&variableBindings.list[0].name, &string);
printf("Variable = %s/n", string);
if (string) SNMP_free(string);
printf("Value = ");
SnmpUtilPrintAsnAny(&variableBindings.list[0].value);
printf("/n");
}
} // end if()
// 准备下一次查询
SnmpUtilOidCpy(&tempOid, &variableBindings.list[0].name);
SnmpUtilVarBindFree(&variableBindings.list[0]);
SnmpUtilOidCpy(&variableBindings.list[0].name, &tempOid);
variableBindings.list[0].value.asnType = ASN_NULL;
SnmpUtilOidFree(&tempOid);
} // end while()
// 释放资源
SnmpUtilVarBindListFree(&variableBindings);
SnmpUtilOidFree(&root);
}
// 关闭 SNMP session
if (!SnmpMgrClose(session))//清理退出
{
printf("error on SnmpMgrClose %d/n", GetLastError());
return 1;
}
return 0;
}
内容总结
以上是互联网集市为您收集整理的vc++实现SNMP信息刺探程序全部内容,希望文章能够帮你解决vc++实现SNMP信息刺探程序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。