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

📄 target.c

📁 Snmp(简单网管协议)软件包。
💻 C
字号:
#include <config.h>#if HAVE_WINSOCK_H#include <winsock.h>#endif#if HAVE_STRING_H#include <string.h>#else#include <strings.h>#endif#include "mibincl.h"#include "snmp.h"#include "tools.h"#include "snmpTargetAddrEntry.h"#include "snmpTargetParamsEntry.h"#include "target.h"#include "snmp-tc.h"#define MAX_TAGS 128struct snmp_session *get_target_sessions(char *taglist, TargetFilterFunction *filterfunct,                    void *filterArg) {    struct snmp_session *ret = NULL, thissess;    struct targetAddrTable_struct *targaddrs;    char buf[SPRINT_MAX_LEN], smbuf[64];    char tags[MAX_TAGS][SPRINT_MAX_LEN], *cp;    int numtags = 0, i;    oid udpdomain[] = { 1,3,6,1,6,1,1 };    int udpdomainlen = sizeof(udpdomain)/sizeof(oid);    static struct targetParamTable_struct *param;        DEBUGMSGTL(("target_sessions","looking for: %s\n", taglist));    for(cp = taglist; cp && numtags < MAX_TAGS;) {        cp = copy_word(cp, tags[numtags]);        DEBUGMSGTL(("target_sessions"," for: %d=%s\n", numtags,                    tags[numtags]));        numtags++;    }        for(targaddrs = get_addrTable(); targaddrs; targaddrs = targaddrs->next) {        /* legal row? */        if (targaddrs->tDomain == NULL ||            targaddrs->tAddress == NULL ||            targaddrs->rowStatus != SNMP_ROW_ACTIVE) {            DEBUGMSGTL(("target_sessions",                         "  which is not ready yet\n"));            continue;        }        if (snmp_oid_compare(udpdomain, udpdomainlen,                             targaddrs->tDomain,                             targaddrs->tDomainLen) != 0) {            snmp_log(LOG_ERR,                     "unsupported domain for target address table entry %s\n",                     targaddrs->name);        }        /* check tag list to see if we match */        if (targaddrs->tagList) {            /* loop through tag list looking for requested tags */            for(cp = targaddrs->tagList; cp; ) {                cp = copy_word(cp, buf);                for(i = 0; i < numtags; i++) {                    if (strcmp(buf,tags[i]) == 0) {                        /* found a valid target table entry */                        DEBUGMSGTL(("target_sessions","found one: %s\n",                                     tags[i]));                        if (targaddrs->params) {                            param = get_paramEntry(targaddrs->params);                            if (!param || param->rowStatus != SNMP_ROW_ACTIVE) {                                /* parameter entry must exist and be active */                                continue;                            }                        } else {                            /* parameter entry must be specified */                            continue;                        }                        /* last chance for caller to opt-out.  Call                           filtering function */                        if (filterfunct &&                            (*(filterfunct))(targaddrs, param, filterArg)) {                            continue;                        }                        if (targaddrs->storageType != ST_READONLY &&                            targaddrs->sess &&                            param->updateTime >=                            targaddrs->sessionCreationTime) {                            /* parameters have changed, nuke the old session */                            snmp_close(targaddrs->sess);                            targaddrs->sess = NULL;                        }                        /* target session already exists? */                        if (targaddrs->sess == NULL) {                            /* create an appropriate snmp session and add                           it to our return list */                            sprintf(smbuf, "%d.%d.%d.%d",                                    (int) targaddrs->tAddress[0],                                    (int) targaddrs->tAddress[1],                                    (int) targaddrs->tAddress[2],                                    (int) targaddrs->tAddress[3]);                            memset(&thissess,0,sizeof(thissess));                            thissess.peername = strdup(smbuf);                            DEBUGMSGTL(("target_sessions","  to: %s:%d (%d*256+%d)\n",                                        smbuf,                                        (((unsigned int)                                          targaddrs->tAddress[4])*256 +                                         (unsigned int) targaddrs->tAddress[5]),                                        targaddrs->tAddress[4],                                        targaddrs->tAddress[5]));                            thissess.remote_port =                                ((unsigned int) targaddrs->tAddress[4])*256 +                                (unsigned int) targaddrs->tAddress[5];                            thissess.timeout = (targaddrs->timeout)*1000;                            DEBUGMSGTL(("target_sessions","timeout: %d -> %d\n",                                        targaddrs->timeout, thissess.timeout));                            thissess.retries = targaddrs->retryCount;                            if (param->mpModel == SNMP_VERSION_3 &&                                param->secModel != 3) {                                snmp_log(LOG_ERR,                                         "unsupported model/secmodel combo for target %s\n",                                         targaddrs->name);                                /* XXX: memleak */                                continue;                            }                            thissess.version = param->mpModel;                            if (param->mpModel == SNMP_VERSION_3) {                                thissess.securityName =                                    strdup(param->secName);                                thissess.securityNameLen =                                    strlen(thissess.securityName);                                thissess.securityLevel = param->secLevel;                            } else {                                thissess.community =                                    (u_char *)strdup(param->secName);                                thissess.community_len =                                    strlen((char *)thissess.community);                            }                                                        targaddrs->sess = snmp_open(&thissess);                            targaddrs->sessionCreationTime = time(NULL);                        }                        if (targaddrs->sess) {                            if (ret)                                targaddrs->sess->next = ret;                            ret = targaddrs->sess;                        } else {                            snmp_sess_perror("target session", &thissess);                        }                    }                }            }        }    }    return ret;}

⌨️ 快捷键说明

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