📄 inet.c
字号:
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 + -