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

📄 inet.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
📖 第 1 页 / 共 2 页
字号:
    if (strcmp(name, "udp") == 0) {        request = snmp_pdu_create(SNMP_MSG_GETNEXT);        snmp_add_null_var(request, oid_udptable,                          sizeof(oid_udptable) / sizeof(oid));        status = STAT_SUCCESS;    } else        status = STAT_TIMEOUT;    while (status == STAT_SUCCESS) {        if (response)            snmp_free_pdu(response);        response = NULL;        status = snmp_synch_response(Session, request, &response);        if (status != STAT_SUCCESS            || response->errstat != SNMP_ERR_NOERROR) {            fprintf(stderr, "SNMP request failed\n");            break;        }        vp = response->variables;        if (!vp)            break;        if (vp->name_length != 15 ||            memcmp(vp->name, oid_udptable, sizeof(oid_udptable))) {            break;        }        request = snmp_pdu_create(SNMP_MSG_GETNEXT);        snmp_add_null_var(request, vp->name, vp->name_length);        instance = vp->name + 10;        for (up = udpconn; up != NULL; up = up->next) {            if (!memcmp(instance, up->instance, sizeof(up->instance)))                break;        }        if (up == NULL) {            up = (struct udp_entry *) calloc(1, sizeof(struct udp_entry));            if (up == NULL)                break;            if (udplast != NULL)                udplast->next = up;            udplast = up;            if (udpconn == NULL)                udpconn = up;            memmove(up->instance, instance, sizeof(up->instance));        }        if (vp->name[UDP_ENTRY] == UDP_LOCADDR) {            memmove(&up->localAddress, vp->val.string, sizeof(u_long));            up->locAddrSet = 1;        }        if (vp->name[UDP_ENTRY] == UDP_LOCPORT) {            if (validUShortAssign(&up->localPort, *vp->val.integer,                                  "UDP_LOCPORT"))                up->locPortSet = 1;        }    }    if (response)        snmp_free_pdu(response);    response = NULL;    for (first = 1, up = udpconn, newup = NULL; up != NULL; up = up->next) {        if (newup)            free(newup);        newup = up;        if (!(up->locAddrSet && up->locPortSet)) {            printf("incomplete entry\n");            continue;        }        if (first) {            printf("Active Internet (%s) Connections", name);            putchar('\n');            printf("%-5.5s %-28.28s\n", "Proto", "Local Address");            first = 0;        }        printf("%-5.5s ", "udp");        inetprint(&up->localAddress, up->localPort, "udp");        putchar('\n');    }    if (newup)        free(newup);}intvalidUShortAssign(unsigned short *pushort, int ival, const char *errstr){    u_long          ulval = (u_long) ival;    if (ival > 65535) {        printf("Warning: %s value %ld (0x%lx) is not a port address\n",               errstr, ulval, ulval);        return 0;    }    *pushort = (unsigned short) ulval;    return 1;}/* * Dump UDP statistics structure. */voidudp_stats(void){    oid             varname[MAX_OID_LEN], *udpentry;    size_t          varname_len;    netsnmp_variable_list *var;    int             count;    struct stat_table *sp = udp_stattab;    memmove(varname, oid_udpstats, sizeof(oid_udpstats));    varname_len = sizeof(oid_udpstats) / sizeof(oid);    udpentry = varname + 7;    printf("udp:\n");    count = sizeof(udp_stattab) / sizeof(struct stat_table);    while (count--) {        *udpentry = sp->entry;        var = getvarbyname(Session, varname, varname_len);        if (var && var->val.integer) {            putchar('\t');            printf(sp->description, *var->val.integer,                   plural((int) *var->val.integer));            putchar('\n');        }        if (var)            snmp_free_var(var);        sp++;    }}/* * Dump TCP statistics structure. */voidtcp_stats(void){    oid             varname[MAX_OID_LEN], *tcpentry;    size_t          varname_len;    netsnmp_variable_list *var;    int             count;    struct stat_table *sp = tcp_stattab;    memmove(varname, oid_tcpstats, sizeof(oid_tcpstats));    varname_len = sizeof(oid_tcpstats) / sizeof(oid);    tcpentry = varname + 7;    printf("tcp:\n");    count = sizeof(tcp_stattab) / sizeof(struct stat_table);    while (count--) {        *tcpentry = sp->entry;        var = getvarbyname(Session, varname, varname_len);        if (var && var->val.integer) {            putchar('\t');            printf(sp->description, *var->val.integer,                   plural((int) *var->val.integer));            putchar('\n');        }        if (var)            snmp_free_var(var);        sp++;    }}/* * Dump IP statistics structure. */voidip_stats(void){    oid             varname[MAX_OID_LEN], *ipentry;    size_t          varname_len;    netsnmp_variable_list *var;    int             count;    struct stat_table *sp = ip_stattab;    memmove(varname, oid_ipstats, sizeof(oid_ipstats));    varname_len = sizeof(oid_ipstats) / sizeof(oid);    ipentry = varname + 7;    printf("ip:\n");    count = sizeof(ip_stattab) / sizeof(struct stat_table);    while (count--) {        *ipentry = sp->entry;        var = getvarbyname(Session, varname, varname_len);        if (var && var->val.integer) {            putchar('\t');            printf(sp->description, *var->val.integer,                   plural((int) *var->val.integer));            putchar('\n');        }        if (var)            snmp_free_var(var);        sp++;    }}/* * Dump ICMP statistics. */voidicmp_stats(void){    oid             varname[MAX_OID_LEN], *icmpentry;    size_t          varname_len;    netsnmp_variable_list *var;    int             count, first;    struct stat_table *sp;    memmove(varname, oid_icmpstats, sizeof(oid_icmpstats));    varname_len = sizeof(oid_icmpstats) / sizeof(oid);    icmpentry = varname + 7;    printf("icmp:\n");    sp = icmp_stattab;    count = sizeof(icmp_stattab) / sizeof(struct stat_table);    while (count--) {        *icmpentry = sp->entry;        var = getvarbyname(Session, varname, varname_len);        if (var && var->val.integer) {            putchar('\t');            printf(sp->description, *var->val.integer,                   plural((int) *var->val.integer));            putchar('\n');        }        if (var)            snmp_free_var(var);        sp++;    }    sp = icmp_outhistogram;    first = 1;    count = sizeof(icmp_outhistogram) / sizeof(struct stat_table);    while (count--) {        *icmpentry = sp->entry;        var = getvarbyname(Session, varname, varname_len);        if (var && var->val.integer && *var->val.integer != 0) {            if (first) {                printf("\tOutput Histogram:\n");                first = 0;            }            printf("\t\t");            printf(sp->description, *var->val.integer,                   plural((int) *var->val.integer));            putchar('\n');        }        if (var)            snmp_free_var(var);        sp++;    }    sp = icmp_inhistogram;    first = 1;    count = sizeof(icmp_inhistogram) / sizeof(struct stat_table);    while (count--) {        *icmpentry = sp->entry;        var = getvarbyname(Session, varname, varname_len);        if (var && var->val.integer && *var->val.integer != 0) {            if (first) {                printf("\tInput Histogram:\n");                first = 0;            }            printf("\t\t");            printf(sp->description, *var->val.integer,                   plural((int) *var->val.integer));            putchar('\n');        }        if (var)            snmp_free_var(var);        sp++;    }}/* * Pretty print an Internet address (net address + port). * If the nflag was specified, use numbers instead of names. */voidinetprint(struct in_addr *in, u_short port, const char *proto){    struct servent *sp = 0;    char            line[80], *cp;    int             width;    sprintf(line, "%.*s.", 18, inetname(*in));    cp = (char *) strchr(line, '\0');    if (!nflag && port)        sp = getservbyport(htons(port), proto);    if (sp || port == 0)        sprintf(cp, "%.12s", sp ? sp->s_name : "*");    else        sprintf(cp, "%d", port);    width = 28;    printf(" %-*.*s", width, width, line);}/* * Construct an Internet address representation. * If the nflag has been supplied, give  * numeric value, otherwise try for symbolic name. */static char    *inetname(struct in_addr in){    register char  *cp;    static char     line[50];    struct hostent *hp;    struct netent  *np;    static char     domain[MAXHOSTNAMELEN + 1];    static int      first = 1;    if (first && !nflag) {        first = 0;        if (gethostname(domain, MAXHOSTNAMELEN) == 0 &&            (cp = (char *) strchr(domain, '.')))            (void) strcpy(domain, cp + 1);        else            domain[0] = 0;    }    cp = 0;    if (!nflag && in.s_addr != INADDR_ANY) {        u_long          net = inet_netof(in);        u_long          lna = inet_lnaof(in);        if (lna == INADDR_ANY) {            np = getnetbyaddr(net, AF_INET);            if (np)                cp = np->n_name;        }        if (cp == 0) {            hp = gethostbyaddr((char *) &in, sizeof(in), AF_INET);            if (hp) {                if ((cp = (char *) strchr(hp->h_name, '.')) &&                    !strcmp(cp + 1, domain))                    *cp = 0;                cp = (char *) hp->h_name;            }        }    }    if (in.s_addr == INADDR_ANY)        strcpy(line, "*");    else if (cp) {        strncpy(line, cp, sizeof(line));        line[ sizeof(line)-1 ] = 0;    } else {        in.s_addr = ntohl(in.s_addr);#define C(x)	(unsigned)((x) & 0xff)        sprintf(line, "%u.%u.%u.%u", C(in.s_addr >> 24),                C(in.s_addr >> 16), C(in.s_addr >> 8), C(in.s_addr));    }    return (line);}

⌨️ 快捷键说明

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