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

📄 inet6.c

📁 ucd-snmp源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	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;    struct 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;    struct 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;    struct 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;    struct 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)		strcpy(line, cp);	else		inet_ntop(AF_INET6, in, line, sizeof(line));	return (line);}#endif	/* INET6 */

⌨️ 快捷键说明

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