c语言printf snm,vc++实现SNMP信息刺探程序

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;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值