📄 inet6.c
字号:
first = 0; } printf("%-5.5s ", name); inet6print(&tp->localAddress, tp->localPort, name); inet6print(&tp->remoteAddress, tp->remotePort, name); if (tp->state < 1 || tp->state > TCP_NSTATES) printf(" %d", tp->state); else printf(" %s", tcpstates[tp->state]); putchar('\n'); } if (newtp) free(newtp); response = NULL; if (strncmp(name, "udp", 3) == 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 != 28 || 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(struct in6_addr)); 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 ", name); inet6print(&up->localAddress, up->localPort, name); putchar('\n'); } if (newup) free(newup);}static 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;}#if DEBUGGING_INFORMATION /* * The following routines print out useful debugging information. * This isn't normally needed or easily accessible, * but could potentially be very useful. * Rather than delete it totally, it's commented out *//* * Dump UDP statistics structure. */voidudp_stats(void){ oid varname[MAX_OID_LEN], *udpentry; int 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; int 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; int 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; int 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++; }}#endif/* * Pretty print an Internet address (net address + port). * If the nflag was specified, use numbers instead of names. */voidinet6print(struct in6_addr *in, u_short port, const char *proto){ struct servent *sp = 0; char line[80], *cp; int width; sprintf(line, "%.*s.", 22, inet6name(in)); cp = strchr(line, '\0'); if (!nflag && port) sp = getservbyport(htons(port), proto); if (sp || port == 0) sprintf(cp, "%.8s", 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 *inet6name(struct in6_addr *in){ register char *cp; static char line[50]; struct hostent *hp; static char domain[MAXHOSTNAMELEN + 1]; static int first = 1; if (first && !nflag) { first = 0; if (gethostname(domain, MAXHOSTNAMELEN) == 0 && (cp = strchr(domain, '.'))) (void) strcpy(domain, cp + 1); else domain[0] = 0; } cp = 0; if (!nflag && !IN6_IS_ADDR_UNSPECIFIED(in)) { hp = gethostbyaddr((char *) in, sizeof(*in), AF_INET6); if (hp) { if ((cp = strchr(hp->h_name, '.')) && !strcmp(cp + 1, domain)) *cp = 0; cp = hp->h_name; } } if (IN6_IS_ADDR_UNSPECIFIED(in)) strcpy(line, "*"); else if (cp) { strncpy(line, cp, sizeof(line)); line[ sizeof(line)-1 ] = 0; } else inet_ntop(AF_INET6, in, line, sizeof(line)); return (line);}#endif /* INET6 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -