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

📄 icmp.c

📁 非常不错的网管开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
u_char *var_icmp(struct variable *vp,	 oid *name,	 size_t *length,	 int exact,	 size_t *var_len,	 WriteMethod **write_method){    register int i;    static struct icmpstat icmpstat;   if (header_icmp(vp, name, length, exact, var_len, write_method) == MATCH_FAILED )	return NULL;    /*     *        Get the ICMP statistics from the kernel...     */#if !defined(CAN_USE_SYSCTL) || !defined(ICMPCTL_STATS)    auto_nlist(ICMPSTAT_SYMBOL, (char *)&icmpstat, sizeof (icmpstat));#else    {	    int sname[] = { CTL_NET, PF_INET, IPPROTO_ICMP, ICMPCTL_STATS };	    size_t len;	    	    len = sizeof icmpstat;	    if (sysctl(sname, 4, &icmpstat, &len, 0, 0) < 0)		    return NULL;    }#endif /* use sysctl */    switch (vp->magic) {	case ICMPINMSGS:	    long_return = icmpstat.icps_badcode + icmpstat.icps_tooshort +			  icmpstat.icps_checksum + icmpstat.icps_badlen;	    for (i=0; i <= ICMP_MAXTYPE; i++)		long_return += icmpstat.icps_inhist[i];	    return (u_char *)&long_return;	case ICMPINERRORS:	    long_return = icmpstat.icps_badcode + icmpstat.icps_tooshort +			  icmpstat.icps_checksum + icmpstat.icps_badlen;	    return (u_char *)&long_return;	case ICMPINDESTUNREACHS:          long_return = icmpstat.icps_inhist[ICMP_UNREACH];          return (u_char *) &long_return;	case ICMPINTIMEEXCDS:          long_return = icmpstat.icps_inhist[ICMP_TIMXCEED];          return (u_char *) &long_return;	case ICMPINPARMPROBS:          long_return = icmpstat.icps_inhist[ICMP_PARAMPROB];          return (u_char *) &long_return;	case ICMPINSRCQUENCHS:          long_return = icmpstat.icps_inhist[ICMP_SOURCEQUENCH];          return (u_char *) &long_return;	case ICMPINREDIRECTS:          long_return = icmpstat.icps_inhist[ICMP_REDIRECT];          return (u_char *) &long_return;	case ICMPINECHOS:          long_return = icmpstat.icps_inhist[ICMP_ECHO];          return (u_char *) &long_return;	case ICMPINECHOREPS:          long_return = icmpstat.icps_inhist[ICMP_ECHOREPLY];          return (u_char *) &long_return;	case ICMPINTIMESTAMPS:          long_return = icmpstat.icps_inhist[ICMP_TSTAMP];          return (u_char *) &long_return;	case ICMPINTIMESTAMPREPS:          long_return = icmpstat.icps_inhist[ICMP_TSTAMPREPLY];          return (u_char *) &long_return;	case ICMPINADDRMASKS:          long_return = icmpstat.icps_inhist[ICMP_MASKREQ];          return (u_char *) &long_return;	case ICMPINADDRMASKREPS:          long_return = icmpstat.icps_inhist[ICMP_MASKREPLY];          return (u_char *) &long_return;	case ICMPOUTMSGS:	    long_return = icmpstat.icps_oldshort + icmpstat.icps_oldicmp;	    for (i=0; i <= ICMP_MAXTYPE; i++)		long_return += icmpstat.icps_outhist[i];	    return (u_char *)&long_return;	case ICMPOUTERRORS:	    long_return = icmpstat.icps_oldshort + icmpstat.icps_oldicmp;	    return (u_char *)&long_return;	case ICMPOUTDESTUNREACHS:          long_return = icmpstat.icps_outhist[ICMP_UNREACH];          return (u_char *) &long_return;	case ICMPOUTTIMEEXCDS:          long_return = icmpstat.icps_outhist[ICMP_TIMXCEED];          return (u_char *) &long_return;	case ICMPOUTPARMPROBS:          long_return = icmpstat.icps_outhist[ICMP_PARAMPROB];          return (u_char *) &long_return;	case ICMPOUTSRCQUENCHS:          long_return = icmpstat.icps_outhist[ICMP_SOURCEQUENCH];          return (u_char *) &long_return;	case ICMPOUTREDIRECTS:          long_return = icmpstat.icps_outhist[ICMP_REDIRECT];          return (u_char *) &long_return;	case ICMPOUTECHOS:          long_return = icmpstat.icps_outhist[ICMP_ECHO];          return (u_char *) &long_return;	case ICMPOUTECHOREPS:          long_return = icmpstat.icps_outhist[ICMP_ECHOREPLY];          return (u_char *) &long_return;	case ICMPOUTTIMESTAMPS:          long_return = icmpstat.icps_outhist[ICMP_TSTAMP];          return (u_char *) &long_return;	case ICMPOUTTIMESTAMPREPS:          long_return = icmpstat.icps_outhist[ICMP_TSTAMPREPLY];          return (u_char *) &long_return;	case ICMPOUTADDRMASKS:          long_return = icmpstat.icps_outhist[ICMP_MASKREQ];          return (u_char *) &long_return;	case ICMPOUTADDRMASKREPS:          long_return = icmpstat.icps_outhist[ICMP_MASKREPLY];          return (u_char *) &long_return;	default:	    DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_icmp\n", vp->magic));    }    return NULL;}#endif /* not HAVE_SYS_TCPIPSTATS_H */#else /* linux */u_char *var_icmp(struct variable *vp,	 oid *name,	 size_t *length,	 int exact,	 size_t *var_len,	 WriteMethod **write_method){    static struct icmp_mib icmpstat;   if (header_icmp(vp, name, length, exact, var_len, write_method) == MATCH_FAILED )	return(NULL);    linux_read_icmp_stat (&icmpstat);    switch (vp->magic){    case ICMPINMSGS: return (u_char *) &icmpstat.IcmpInMsgs;    case ICMPINERRORS: return (u_char *) &icmpstat.IcmpInErrors;    case ICMPINDESTUNREACHS: return (u_char *) &icmpstat.IcmpInDestUnreachs;    case ICMPINTIMEEXCDS: return (u_char *) &icmpstat.IcmpInTimeExcds;    case ICMPINPARMPROBS: return (u_char *) &icmpstat.IcmpInParmProbs;    case ICMPINSRCQUENCHS: return (u_char *) &icmpstat.IcmpInSrcQuenchs;    case ICMPINREDIRECTS: return (u_char *) &icmpstat.IcmpInRedirects;    case ICMPINECHOS: return (u_char *) &icmpstat.IcmpInEchos;    case ICMPINECHOREPS: return (u_char *) &icmpstat.IcmpInEchoReps;    case ICMPINTIMESTAMPS: return (u_char *) &icmpstat.IcmpInTimestamps;    case ICMPINTIMESTAMPREPS: return (u_char *) &icmpstat.IcmpInTimestampReps;    case ICMPINADDRMASKS: return (u_char *) &icmpstat.IcmpInAddrMasks;    case ICMPINADDRMASKREPS: return (u_char *) &icmpstat.IcmpInAddrMaskReps;    case ICMPOUTMSGS: return (u_char *) &icmpstat.IcmpOutMsgs;    case ICMPOUTERRORS: return (u_char *) &icmpstat.IcmpOutErrors;    case ICMPOUTDESTUNREACHS: return (u_char *) &icmpstat.IcmpOutDestUnreachs;    case ICMPOUTTIMEEXCDS: return (u_char *) &icmpstat.IcmpOutTimeExcds;    case ICMPOUTPARMPROBS: return (u_char *) &icmpstat.IcmpOutParmProbs;    case ICMPOUTSRCQUENCHS: return (u_char *) &icmpstat.IcmpOutSrcQuenchs;    case ICMPOUTREDIRECTS: return (u_char *) &icmpstat.IcmpOutRedirects;    case ICMPOUTECHOS: return (u_char *) &icmpstat.IcmpOutEchos;    case ICMPOUTECHOREPS: return (u_char *) &icmpstat.IcmpOutEchoReps;    case ICMPOUTTIMESTAMPS: return (u_char *) &icmpstat.IcmpOutTimestamps;    case ICMPOUTTIMESTAMPREPS: return (u_char *)&icmpstat.IcmpOutTimestampReps;    case ICMPOUTADDRMASKS: return (u_char *) &icmpstat.IcmpOutAddrMasks;    case ICMPOUTADDRMASKREPS: return (u_char *) &icmpstat.IcmpOutAddrMaskReps;    default:      DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_icmp\n", vp->magic));    }    return NULL;}#endif /* linux */#else /* solaris2 */u_char *var_icmp(struct variable *vp,	 oid *name,	 size_t *length,	 int exact,	 size_t *var_len,	 WriteMethod **write_method){    mib2_icmp_t icmpstat;    if (header_icmp(vp, name, length, exact, var_len, write_method) == MATCH_FAILED )	return(NULL);    /*     *	Get the ICMP statistics from the kernel...     */    if (getMibstat(MIB_ICMP, &icmpstat, sizeof(mib2_icmp_t), GET_FIRST, &Get_everything, NULL) < 0)      return (NULL);		/* Things are ugly ... */    switch (vp->magic){	case ICMPINMSGS:      		long_return = icmpstat.icmpInMsgs;      		break;	case ICMPINERRORS:      		long_return = icmpstat.icmpInErrors;      		break;	case ICMPINDESTUNREACHS:      		long_return = icmpstat.icmpInDestUnreachs;      		break;	case ICMPINTIMEEXCDS:      		long_return = icmpstat.icmpInTimeExcds;      		break;	case ICMPINPARMPROBS:      		long_return = icmpstat.icmpInParmProbs;      		break;	case ICMPINSRCQUENCHS:      		long_return = icmpstat.icmpInSrcQuenchs;      		break;	case ICMPINREDIRECTS:      		long_return = icmpstat.icmpInRedirects;      		break;	case ICMPINECHOS:      		long_return = icmpstat.icmpInEchos;      		break;	case ICMPINECHOREPS:      		long_return = icmpstat.icmpInEchoReps;      		break;	case ICMPINTIMESTAMPS:      		long_return = icmpstat.icmpInTimestamps;      		break;	case ICMPINTIMESTAMPREPS:      		long_return = icmpstat.icmpInTimestampReps;      		break;	case ICMPINADDRMASKS:      		long_return = icmpstat.icmpInAddrMasks;      		break;	case ICMPINADDRMASKREPS:      		long_return = icmpstat.icmpInAddrMaskReps;      		break;	case ICMPOUTMSGS:      		long_return = icmpstat.icmpOutMsgs;      		break;	case ICMPOUTERRORS:      		long_return = icmpstat.icmpOutErrors;      		break;	case ICMPOUTDESTUNREACHS:      		long_return = icmpstat.icmpOutDestUnreachs;      		break;	case ICMPOUTTIMEEXCDS:      		long_return = icmpstat.icmpOutTimeExcds;      		break;	case ICMPOUTPARMPROBS:      		long_return = icmpstat.icmpOutParmProbs;      		break;	case ICMPOUTSRCQUENCHS:      		long_return = icmpstat.icmpOutSrcQuenchs;      		break;	case ICMPOUTREDIRECTS:      		long_return = icmpstat.icmpOutRedirects;      		break;	case ICMPOUTECHOS:      		long_return = icmpstat.icmpOutEchos;      		break;	case ICMPOUTECHOREPS:      		long_return = icmpstat.icmpOutEchoReps;      		break;	case ICMPOUTTIMESTAMPS:      		long_return = icmpstat.icmpOutTimestamps;      		break;	case ICMPOUTTIMESTAMPREPS:      		long_return = icmpstat.icmpOutTimestampReps;      		break;	case ICMPOUTADDRMASKS:      		long_return = icmpstat.icmpOutAddrMasks;      		break;	case ICMPOUTADDRMASKREPS:      		long_return = icmpstat.icmpOutAddrMaskReps;      		break;	default:		DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_icmp\n", vp->magic));                return(NULL);    }    return ((u_char *) &long_return);}#endif /* solaris2 */	/*********************	 *	 *  Internal implementation functions	 *	 *********************/#ifdef linux/* * lucky days. since 1.1.16 the icmp statistics are avail by the proc * file-system. */static voidlinux_read_icmp_stat (struct icmp_mib *icmpstat){  FILE *in = fopen ("/proc/net/snmp", "r");  char line [1024];  memset ((char *) icmpstat,(0), sizeof (*icmpstat));  if (! in)    return;  while (line == fgets (line, sizeof(line), in))    {      if (26 == sscanf (line,"Icmp: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",   &icmpstat->IcmpInMsgs, &icmpstat->IcmpInErrors, &icmpstat->IcmpInDestUnreachs,    &icmpstat->IcmpInTimeExcds, &icmpstat->IcmpInParmProbs, &icmpstat->IcmpInSrcQuenchs,   &icmpstat->IcmpInRedirects, &icmpstat->IcmpInEchos, &icmpstat->IcmpInEchoReps,    &icmpstat->IcmpInTimestamps, &icmpstat->IcmpInTimestampReps, &icmpstat->IcmpInAddrMasks,   &icmpstat->IcmpInAddrMaskReps, &icmpstat->IcmpOutMsgs, &icmpstat->IcmpOutErrors,   &icmpstat->IcmpOutDestUnreachs, &icmpstat->IcmpOutTimeExcds,    &icmpstat->IcmpOutParmProbs, &icmpstat->IcmpOutSrcQuenchs, &icmpstat->IcmpOutRedirects,   &icmpstat->IcmpOutEchos, &icmpstat->IcmpOutEchoReps, &icmpstat->IcmpOutTimestamps,    &icmpstat->IcmpOutTimestampReps, &icmpstat->IcmpOutAddrMasks,   &icmpstat->IcmpOutAddrMaskReps))	break;    }  fclose (in);}#endif /* linux */

⌨️ 快捷键说明

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