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

📄 snmp_parse_args.c

📁 snmp up 2
💻 C
📖 第 1 页 / 共 2 页
字号:
                fprintf(stderr,                        "Invalid timeout in seconds after -t flag.\n");                return (-1);            }            break;        case 'r':            session->retries = atoi(optarg);            if (session->retries < 0 || !isdigit(optarg[0])) {                fprintf(stderr,                        "Invalid number of retries after -r flag.\n");                return (-1);            }            break;        case 'c':            Cpsz = optarg;            break;        case '3':            if (snmpv3_options(optarg, session, &Apsz, &Xpsz, argc, argv) <                0) {                return (-1);            }            break;#define SNMPV3_CMD_OPTIONS#ifdef  SNMPV3_CMD_OPTIONS        case 'Z':            session->engineBoots = strtoul(optarg, NULL, 10);            if (session->engineBoots == 0 || !isdigit(optarg[0])) {                fprintf(stderr,                        "Need engine boots value after -Z flag.\n");                return (-1);            }            cp = strchr(optarg, ',');            if (cp && *(++cp) && isdigit(*cp))                session->engineTime = strtoul(cp, NULL, 10);            /*             * Handle previous '-Z boot time' syntax              */            else if ((optind < argc) && isdigit(argv[optind][0]))                session->engineTime = strtoul(argv[optind], NULL, 10);            else {                fprintf(stderr, "Need engine time value after -Z flag.\n");                return (-1);            }            break;        case 'e':{                size_t          ebuf_len = 32, eout_len = 0;                u_char         *ebuf = (u_char *) malloc(ebuf_len);                if (ebuf == NULL) {                    fprintf(stderr,                            "malloc failure processing -e flag.\n");                    return (-1);                }                if (!snmp_hex_to_binary                    (&ebuf, &ebuf_len, &eout_len, 1, optarg)) {                    fprintf(stderr,                            "Bad engine ID value after -e flag.\n");                    free(ebuf);                    return (-1);                }                session->securityEngineID = ebuf;                session->securityEngineIDLen = eout_len;                break;            }        case 'E':{                size_t          ebuf_len = 32, eout_len = 0;                u_char         *ebuf = (u_char *) malloc(ebuf_len);                if (ebuf == NULL) {                    fprintf(stderr,                            "malloc failure processing -E flag.\n");                    return (-1);                }                if (!snmp_hex_to_binary                    (&ebuf, &ebuf_len, &eout_len, 1, optarg)) {                    fprintf(stderr,                            "Bad engine ID value after -E flag.\n");                    free(ebuf);                    return (-1);                }                session->contextEngineID = ebuf;                session->contextEngineIDLen = eout_len;                break;            }        case 'n':            session->contextName = optarg;            session->contextNameLen = strlen(optarg);            break;        case 'u':            session->securityName = optarg;            session->securityNameLen = strlen(optarg);            break;        case 'l':            if (!strcasecmp(optarg, "noAuthNoPriv") || !strcmp(optarg, "1")                || !strcasecmp(optarg, "nanp")) {                session->securityLevel = SNMP_SEC_LEVEL_NOAUTH;            } else if (!strcasecmp(optarg, "authNoPriv")                       || !strcmp(optarg, "2")                       || !strcasecmp(optarg, "anp")) {                session->securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;            } else if (!strcasecmp(optarg, "authPriv")                       || !strcmp(optarg, "3")                       || !strcasecmp(optarg, "ap")) {                session->securityLevel = SNMP_SEC_LEVEL_AUTHPRIV;            } else {                fprintf(stderr,                        "Invalid security level specified after -l flag: %s\n",                        optarg);                return (-1);            }            break;        case 'a':            if (!strcasecmp(optarg, "MD5")) {                session->securityAuthProto = usmHMACMD5AuthProtocol;                session->securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;            } else if (!strcasecmp(optarg, "SHA")) {                session->securityAuthProto = usmHMACSHA1AuthProtocol;                session->securityAuthProtoLen = USM_AUTH_PROTO_SHA_LEN;            } else {                fprintf(stderr,                        "Invalid authentication protocol specified after -a flag: %s\n",                        optarg);                return (-1);            }            break;        case 'x':            if (!strcasecmp(optarg, "DES")) {                session->securityPrivProto = usmDESPrivProtocol;                session->securityPrivProtoLen = USM_PRIV_PROTO_DES_LEN;#ifdef HAVE_AES            } else if (!strcasecmp(optarg, "AES128")) {                session->securityPrivProto = usmAES128PrivProtocol;                session->securityPrivProtoLen = USM_PRIV_PROTO_AES128_LEN;            } else if (!strcasecmp(optarg, "AES192")) {                session->securityPrivProto = usmAES192PrivProtocol;                session->securityPrivProtoLen = USM_PRIV_PROTO_AES192_LEN;            } else if (!strcasecmp(optarg, "AES256")) {                session->securityPrivProto = usmAES256PrivProtocol;                session->securityPrivProtoLen = USM_PRIV_PROTO_AES256_LEN;#endif            } else {                fprintf(stderr,                        "Invalid privacy protocol specified after -x flag: %s\n",                        optarg);                return (-1);            }            break;        case 'A':            Apsz = optarg;            break;        case 'X':            Xpsz = optarg;            break;#endif                          /* SNMPV3_CMD_OPTIONS */        case '?':            return (-1);            break;        default:            proc(argc, argv, arg);            break;        }    }    DEBUGMSGTL(("snmp_parse_args", "finished: %d/%d\n", optind, argc));    /*     * read in MIB database and initialize the snmp library     */    init_snmp("snmpapp");    /*     * session default version      */    if (session->version == SNMP_DEFAULT_VERSION) {        /*         * run time default version          */        session->version = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, 					      NETSNMP_DS_LIB_SNMPVERSION);        /*         * compile time default version          */        if (!session->version) {            switch (DEFAULT_SNMP_VERSION) {            case 1:                session->version = SNMP_VERSION_1;                break;            case 2:                session->version = SNMP_VERSION_2c;                break;            case 3:                session->version = SNMP_VERSION_3;                break;            }        } else {            if (session->version == NETSNMP_DS_SNMP_VERSION_1)  /* bogus value.  version 1 actually = 0 */                session->version = SNMP_VERSION_1;        }    }    /*     * make master key from pass phrases      */    if (Apsz) {        session->securityAuthKeyLen = USM_AUTH_KU_LEN;        if (session->securityAuthProto == NULL) {            /*             * get .conf set default              */            const oid      *def =                get_default_authtype(&session->securityAuthProtoLen);            session->securityAuthProto =                snmp_duplicate_objid(def, session->securityAuthProtoLen);        }        if (session->securityAuthProto == NULL) {            /*             * assume MD5              */            session->securityAuthProto =                snmp_duplicate_objid(usmHMACMD5AuthProtocol,                                     USM_AUTH_PROTO_MD5_LEN);            session->securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;        }        if (generate_Ku(session->securityAuthProto,                        session->securityAuthProtoLen,                        (u_char *) Apsz, strlen(Apsz),                        session->securityAuthKey,                        &session->securityAuthKeyLen) != SNMPERR_SUCCESS) {            snmp_perror(argv[0]);            fprintf(stderr,                    "Error generating a key (Ku) from the supplied authentication pass phrase. \n");            return (-2);        }    }    if (Xpsz) {        session->securityPrivKeyLen = USM_PRIV_KU_LEN;        if (session->securityPrivProto == NULL) {            /*             * get .conf set default              */            const oid      *def =                get_default_privtype(&session->securityPrivProtoLen);            session->securityPrivProto =                snmp_duplicate_objid(def, session->securityPrivProtoLen);        }        if (session->securityPrivProto == NULL) {            /*             * assume DES              */            session->securityPrivProto =                snmp_duplicate_objid(usmDESPrivProtocol,                                     USM_PRIV_PROTO_DES_LEN);            session->securityPrivProtoLen = USM_PRIV_PROTO_DES_LEN;        }        if (generate_Ku(session->securityAuthProto,                        session->securityAuthProtoLen,                        (u_char *) Xpsz, strlen(Xpsz),                        session->securityPrivKey,                        &session->securityPrivKeyLen) != SNMPERR_SUCCESS) {            snmp_perror(argv[0]);            fprintf(stderr,                    "Error generating a key (Ku) from the supplied privacy pass phrase. \n");            return (-2);        }    }    /*     * get the hostname      */    if (optind == argc) {        fprintf(stderr, "No hostname specified.\n");        return (-1);    }    session->peername = argv[optind++]; /* hostname */    /*     * If v1 or v2c, check community has been set, either by a -c option above,     * or via a default token somewhere.       */    if (session->version == SNMP_VERSION_1 ||        session->version == SNMP_VERSION_2c) {        if (Cpsz == NULL) {            Cpsz = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID, 					 NETSNMP_DS_LIB_COMMUNITY);        }        if (Cpsz == NULL) {            fprintf(stderr, "No community name specified.\n");            return (-1);        }        session->community = (unsigned char *) Cpsz;        session->community_len = strlen(Cpsz);    }    return optind;}

⌨️ 快捷键说明

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