webalizer.c

来自「统计日志的工具」· C语言 代码 · 共 1,572 行 · 第 1/5 页

C
1,572
字号
               if (cur_month != rec_month)               {                  clear_month();                  cur_sec   = rec_sec;          /* set current counters     */                  cur_min   = rec_min;                  cur_hour  = rec_hour;                  cur_day   = rec_day;                  cur_month = rec_month;                  cur_year  = rec_year;                  cur_tstamp= rec_tstamp;                  f_day=l_day=rec_day;          /* reset first and last day */               }            }         }         /* check for out of sequence records */         if (rec_tstamp/3600 < cur_tstamp/3600)         {            if (!fold_seq_err && ((rec_tstamp+SLOP_VAL)/3600<cur_tstamp/3600) )               { total_ignore++; continue; }            else            {               rec_sec   = cur_sec;             /* if folding sequence      */               rec_min   = cur_min;             /* errors, just make it     */               rec_hour  = cur_hour;            /* look like the last       */               rec_day   = cur_day;             /* good records timestamp   */               rec_month = cur_month;               rec_year  = cur_year;               rec_tstamp= cur_tstamp;            }         }         cur_tstamp=rec_tstamp;                 /* update current timestamp */         /*********************************************/         /* DO SOME PRE-PROCESS FORMATTING            */         /*********************************************/         /* fix URL field */         cp1 = cp2 = log_rec.url;         /* handle null '-' case here... */         if (*++cp1 == '-') { *cp2++ = '-'; *cp2 = '\0'; }         else         {            /* strip actual URL out of request */            while  ( (*cp1 != ' ') && (*cp1 != '\0') ) cp1++;            if (*cp1 != '\0')            {               /* scan to begin of actual URL field */               while ((*cp1 == ' ') && (*cp1 != '\0')) cp1++;               /* remove duplicate / if needed */               if (( *cp1=='/') && (*(cp1+1)=='/')) cp1++;               while ((*cp1 != ' ')&&(*cp1 != '"')&&(*cp1 != '\0'))                  *cp2++ = *cp1++;               *cp2 = '\0';            }         }         /* un-escape URL */         unescape(log_rec.url);         /* check for service (ie: http://) and lowercase if found */         if ( (cp2=strstr(log_rec.url,"://")) != NULL)         {            cp1=log_rec.url;            while (cp1!=cp2)            {               if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A';               cp1++;            }         }         /* strip query portion of cgi scripts */         cp1 = log_rec.url;         while (*cp1 != '\0')           if (!isurlchar(*cp1)) { *cp1 = '\0'; break; }           else cp1++;         if (log_rec.url[0]=='\0')           { log_rec.url[0]='/'; log_rec.url[1]='\0'; }         /* strip off index.html (or any aliases) */         lptr=index_alias;         while (lptr!=NULL)         {            if ((cp1=strstr(log_rec.url,lptr->string))!=NULL)            {               if ((cp1==log_rec.url)||(*(cp1-1)=='/'))               {                  *cp1='\0';                  if (log_rec.url[0]=='\0')                   { log_rec.url[0]='/'; log_rec.url[1]='\0'; }                  break;               }            }            lptr=lptr->next;         }         /* unescape referrer */         unescape(log_rec.refer);         /* fix referrer field */         cp1 = log_rec.refer;         cp3 = cp2 = cp1++;         if ( (*cp2 != '\0') && (*cp2 == '"') )         {            while ( *cp1 != '\0' )            {               cp3=cp2;               if ((*cp1<32&&*cp1>0) || *cp1==127 || *cp1=='<') *cp1=0;               else *cp2++=*cp1++;            }            *cp3 = '\0';         }         /* strip query portion of cgi referrals */         cp1 = log_rec.refer;         if (*cp1 != '\0')         {            while (*cp1 != '\0')            {               if (!isurlchar(*cp1))               {                  /* Save query portion in log.rec.srchstr */                  strncpy(log_rec.srchstr,cp1,MAXSRCH);                  *cp1++='\0';                  break;               }               else cp1++;            }            /* handle null referrer */            if (log_rec.refer[0]=='\0')              { log_rec.refer[0]='-'; log_rec.refer[1]='\0'; }         }         /* if HTTP request, lowercase http://sitename/ portion */         cp1 = log_rec.refer;         if ( (*cp1=='h') || (*cp1=='H'))         {            while ( (*cp1!='/') && (*cp1!='\0'))            {               if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A';               cp1++;            }            /* now do hostname */            if ( (*cp1=='/') && ( *(cp1+1)=='/')) {cp1++; cp1++;}            while ( (*cp1!='/') && (*cp1!='\0'))            {               if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A';               cp1++;            }         }         /* Do we need to mangle? */         if (mangle_agent)         {            str=cp2=log_rec.agent;	    cp1=strstr(str,"ompatible"); /* check known fakers */	    if (cp1!=NULL) {		while (*cp1!=';'&&*cp1!='\0') cp1++;		/* kludge for Mozilla/3.01 (compatible;) */		if (*cp1++==';' && strcmp(cp1,")\"")) { /* success! */		    while (*cp1 == ' ') cp1++; /* eat spaces */		    while (*cp1!='.'&&*cp1!='\0'&&*cp1!=';') *cp2++=*cp1++;		    if (mangle_agent<5)		    {			while (*cp1!='.'&&*cp1!=';'&&*cp1!='\0') *cp2++=*cp1++;			if (*cp1!=';'&&*cp1!='\0') {			    *cp2++=*cp1++;			    *cp2++=*cp1++;			}		    }		    if (mangle_agent<4)			if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++;		    if (mangle_agent<3)			while (*cp1!=';'&&*cp1!='\0'&&*cp1!='(') *cp2++=*cp1++;		    if (mangle_agent<2)		    {			/* Level 1 - try to get OS */			cp1=strstr(str,")");			if (cp1!=NULL)			{			    *cp2++=' ';			    *cp2++='(';			    while (*cp1!=';'&&*cp1!='('&&cp1!=str) cp1--;			    if (cp1!=str&&*cp1!='\0') cp1++;			    while (*cp1==' '&&*cp1!='\0') cp1++;			    while (*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++;			    *cp2++=')';			}		    }		    *cp2='\0';		} else { /* nothing after "compatible", should we mangle? */		    /* not for now */		}	    } else {		cp1=strstr(str,"Opera");  /* Opera flavor         */		if (cp1!=NULL)		{		    while (*cp1!='/'&&*cp1!=' '&&*cp1!='\0') *cp2++=*cp1++;		    while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++;		    if (mangle_agent<5)		    {			while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++;			*cp2++=*cp1++;			*cp2++=*cp1++;		    }		    if (mangle_agent<4)			if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++;		    if (mangle_agent<3)			while (*cp1!=' '&&*cp1!='\0'&&*cp1!='(') 			    *cp2++=*cp1++;		    if (mangle_agent<2)		    {			cp1=strstr(str,"(");			if (cp1!=NULL)			{			    cp1++;			    *cp2++=' ';			    *cp2++='(';			    while (*cp1!=';'&&*cp1!=')'&&*cp1!='\0') 				*cp2++=*cp1++;			    *cp2++=')';			}		    }		    *cp2='\0';		} else { 		    cp1=strstr(str,"Mozilla");  /* Netscape flavor      */		    if (cp1!=NULL)		    {			while (*cp1!='/'&&*cp1!=' '&&*cp1!='\0') *cp2++=*cp1++;			if (*cp1==' ') *cp1='/';			while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++;			if (mangle_agent<5)			{			    while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++;			    *cp2++=*cp1++;			    *cp2++=*cp1++;			}			if (mangle_agent<4)			    if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++;			if (mangle_agent<3)			    while (*cp1!=' '&&*cp1!='\0'&&*cp1!='(') 				*cp2++=*cp1++;			if (mangle_agent<2)			{			    /* Level 1 - Try to get OS */			    cp1=strstr(str,"(");			    if (cp1!=NULL)			    {				cp1++;				*cp2++=' ';				*cp2++='(';				while (*cp1!=';'&&*cp1!=')'&&*cp1!='\0') 				    *cp2++=*cp1++;				*cp2++=')';			    }			}			*cp2='\0';		    }		}	    }	 }         /* if necessary, shrink referrer to fit storage */         if (strlen(log_rec.refer)>=MAXREFH)         {            if (verbose) fprintf(stderr,"%s [%lu]\n",                msg_big_ref,total_rec);            log_rec.refer[MAXREFH-1]='\0';         }         /* if necessary, shrink URL to fit storage */         if (strlen(log_rec.url)>=MAXURLH)         {            if (verbose) fprintf(stderr,"%s [%lu]\n",                msg_big_req,total_rec);            log_rec.url[MAXURLH-1]='\0';         }         /* fix user agent field */         cp1 = log_rec.agent;         cp3 = cp2 = cp1++;         if ( (*cp2 != '\0') && ((*cp2 == '"')||(*cp2 == '(')) )         {            while (*cp1 |= '\0') { cp3 = cp2; *cp2++ = *cp1++; }            *cp3 = '\0';         }         cp1 = log_rec.agent;    /* CHANGE !!! */         while (*cp1 != 0)       /* get rid of more common _bad_ chars ;)   */         {            if ( (*cp1 < 32) || (*cp1==127) || (*cp1=='<') || (*cp1=='>') )               { *cp1='\0'; break; }            else cp1++;         }         /* fix username if needed */         if (log_rec.ident[0]==0)          {  log_rec.ident[0]='-'; log_rec.ident[1]='\0'; }         else         {            cp3=log_rec.ident;            while (*cp3>=32 && *cp3!='"') cp3++;            *cp3='\0';         }         /* unescape user name */         unescape(log_rec.ident);         /********************************************/         /* PROCESS RECORD                           */         /********************************************/         /* first time through? */         if (cur_month == 0)         {             /* if yes, init our date vars */             cur_month=rec_month; cur_year=rec_year;

⌨️ 快捷键说明

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