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

📄 inet.c

📁 ucd-snmp源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    if(newtp) free(newtp);    response = NULL;    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;    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;    size_t 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;    size_t 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;    size_t 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++;    }}/* * 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.", 22, inetname(*in));	cp = (char *) 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 *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)		strcpy(line, cp);	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 + -