C语言新手求助

SS哭辽 2021-02-27 05:15:09
题目要求是实现下面6个功能,我现在能写出的代码能实现前两个功能,和老师沟通过后,我代码存在的问题应该是没能把文件中信息存储在结构体中,我在代码中使用了strncpy_s函数,想把信息复制到结构体items中,但是后面的功能实现不了,已经卡在这里好久了,还是没有进步,能看看错在哪了吗?
(1)对日志文件进行列表读取和写入;
(2)计算日志文件中GET类型请求方式的占比;
(3)对访问状态码进行分析与统计,计算所有访问状态码的比率;
(4)分析访问最多的客户IP地址,并统计其访问次数;
(5)分析常用密码,并统计密码使用次数;
(6)用户输入时间段,查找该时间段内访问记录并输出到文件中


#include<stdio.h>
#include<string.h>
struct record
{
char method[255];
char ip[255];
char protocol[255];
char time[255];
char add[255];
char port[255];
char page[255];
char status[255];
char exploer_info[255];
char key[255];
char value[255];
char prams_cnt[255];
};
struct record items[2048];//所有记录
int items_cnt=0;//记录数
int main(void)
{
FILE *fp;
fp=fopen("access.log","r+");
if(!fp){
printf("false\n");
}
else{
printf("true\n");
}
int n=0,m=0;
char line[2048];
int i=0,x,j,j_pos,j_pos1;
int lines=0;
int pos[9],pos1[9];
char s='[';
char s1=']';
struct record rec;//定义结构体变量

printf("日志分析:\n");
while(fgets(line,2048,fp)!=NULL)
{
puts(line);
n++;
if(strncmp(line,"[GET]",5)==0)
{
m++;
}//比较两字符串,相等时strncmp函数值返回0,计数
}//输出日志文件内容并统计计数
printf("输出GET请求所占比例:%f\n",1.0*m/n);//输出所占百分比;
int fclose(FILE *fp);


fp=fopen("access.log","r+");
while((fgets(line,2048,fp))!=NULL)
{

x=strlen(line);
j_pos=0,j_pos1=0;
for(j=0;j<x;j++)
{
if(line[j]==s)//此处为'['开始的位置
{
pos[j_pos]=j;
j_pos++;
}
if(line[j]==s1)//']'结束的位置
{
pos1[j_pos1]=j;
j_pos1++;
}
//strncpy_s函数的使用strncpy_s(char *str2,int size2,char *str1,int size1);
strncpy_s(items[s].method,sizeof(items[s].method),line+pos[0]+1,pos1[0]-pos[0]-1);
strncpy_s(items[s].ip,sizeof(items[s].ip),line+pos[1]+1,pos1[1]-pos[1]-1);
strncpy_s(items[s].protocol,sizeof(items[s].protocol),line+pos[2]+1,pos1[2]-pos[2]-1);
strncpy_s(items[s].time,sizeof(items[s].time),line+pos[3]+1,pos1[3]-pos[3]-1);
strncpy_s(items[s].add,sizeof(items[s].add),line+pos[4]+1,pos1[4]-pos[4]-1);
strncpy_s(items[s].page,sizeof(items[s].page),line+pos[5]+1,pos1[5]-pos[5]-1);
strncpy_s(items[s].port,sizeof(items[s].port),line+pos[6]+1,pos1[6]-pos[6]-1);
strncpy_s(items[s].status,sizeof(items[s].status),line+pos[7]+1,pos1[7]-pos[7]-1);
strncpy_s(items[s].exploer_info,sizeof(items[s].exploer_info),line+pos[8]+1,pos1[8]-pos[8]-1);
//结构体成员赋值
}

}
int fclose(FILE *fp);
fp=fopen("access.log","r+");
strncpy_s(items[2048],2048, line[2048]);
int maxi=0,maxn=0;
char arr[255]={0};
char vis[255]={0};
for(i=0;i<line[i];i++)
{
arr[items[i].status[i]]++;
vis[items[i].status[i]]=1;
if(maxn<vis[i])
{
maxn=vis[i];
maxi=i;
}
}
printf("%lf\n",1.0*arr[i]++/i);
printf("%lf",maxi);
int fclose(FILE *fp);
return 0;
}
...全文
637 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
qzjhjxj 2021-02-28
  • 打赏
  • 举报
回复
做完第四题,供参考:
//题目要求是实现下面6个功能,我现在能写出的代码能实现前两个功能,和老师沟通过后,我代码存在的问题应该
//是没能把文件中信息存储在结构体中,我在代码中使用了strncpy_s函数,想把信息复制到结构体items中,但是后面
//的功能实现不了,已经卡在这里好久了,还是没有进步,能看看错在哪了吗?
//(1)对日志文件进行列表读取和写入;
//(2)计算日志文件中GET类型请求方式的占比;
//(3)对访问状态码进行分析与统计,计算所有访问状态码的比率;
//(4)分析访问最多的客户IP地址,并统计其访问次数;
//(5)分析常用密码,并统计密码使用次数;
//(6)用户输入时间段,查找该时间段内访问记录并输出到文件中


#include<stdio.h>
#include<string.h>

struct record       //结构体
{
    char method[255];  //[GET POST]
    char ip[255];      //[233.102.79.50]
    char protocol[255];//[HTTP/1.1]
    char time[255];    //[2021-01-18 08:57:44]
    char add[255];     //[http://39.99.254.200:8810]
    char port[255];    //[/admin/login.jsp]
    char page[255];    //[passwd=admin123&&password=123456]
    char status[255];  //[403]
    char exploer_info[255];//[Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko]
};

struct record rec[2048];//文件有2048行

int main(void)
{

    char line[1024];
    int  i=0,n=0,k,j,max,j_pos,j_pos1,pos[9],pos1[9];

    FILE *fp;
    fp=fopen("access.log","r+");//打开文件
    if(!fp){
        printf("false\n");
        return -1;
    }
    else{
        printf("open file successful!\n");
    }
    while((fgets(line,1024,fp))!=NULL){
         j_pos=0,j_pos1=0;
         for(j=0;j<strlen(line);j++){
            if(line[j]=='[') {pos[j_pos]=j;  j_pos++;} //'[' 位置标记
            if(line[j]==']') {pos1[j_pos1]=j;j_pos1++;}//']' 位置标记
         }
         strncpy(rec[i].method,      (line+pos[0]+1),pos1[0]-pos[0]-1);
         strncpy(rec[i].ip,          (line+pos[1]+1),pos1[1]-pos[1]-1);
         strncpy(rec[i].protocol,    (line+pos[2]+1),pos1[2]-pos[2]-1);
         strncpy(rec[i].time,        (line+pos[3]+1),pos1[3]-pos[3]-1);
         strncpy(rec[i].add,         (line+pos[4]+1),pos1[4]-pos[4]-1);
         strncpy(rec[i].page,        (line+pos[5]+1),pos1[5]-pos[5]-1);
         strncpy(rec[i].port,        (line+pos[6]+1),pos1[6]-pos[6]-1);
         strncpy(rec[i].status,      (line+pos[7]+1),pos1[7]-pos[7]-1);
         strncpy(rec[i].exploer_info,(line+pos[8]+1),pos1[8]-pos[8]-1);
         i++;
    }
    fclose(fp);//关闭文件

    int *a = new int[i],*b = new int[i];// 统计数组申请
    memset(a,0,sizeof(int)*i);  //数组初始化
    memset(b,0,sizeof(int)*i);
    for(j=0;j<i;j++){
      if(strcmp(rec[j].method,"GET")==0)n++;//GET请求统计 第二题
      for(k=0;k<i;k++){
          if(strcmp(rec[j].status,rec[k].status)==0) b[j]++;//状态码进行分析统计 第三题
          if(strcmp(rec[j].ip,rec[k].ip)==0) a[j]++;  //分析统计访问最多的客户IP地址 第四题
      }
    }
    printf("输出GET请求所占比例:%6.3f\n",1.0*n/i);//输出GET请求所占百分比;
    max = a[0];k=0;
    for(j=0;j<i;j++){
        printf("rec[%d].status=%s:%6.3f\n",j,rec[j].status,b[j]*1.0/i);//输出所有访问状态码的比率
        if(max<a[j]) {max = a[j];k=j;} // 找到访问最多的客户IP地址次数 第四题
    }
    printf("访问最多的客户IP地址:%s,共访问:%d次\n",rec[k].ip,a[k]);//输出访问最多的客户IP地址及次数 第四题

    delete [] a; //释放数组
    delete [] b;



    //下面这段输出看看读入到rec[i]中的内容是否达预期目标,等程序调试完毕,这段可以删除:
//例子开始:
    for(j=0;j<i;j++)
     {
       printf("\n%s     %s     %s    %s    %s    %s     %s    %s     %s   \n",
       rec[j].method,rec[j].ip,    rec[j].protocol,
       rec[j].time,  rec[j].add,   rec[j].page,
       rec[j].port,  rec[j].status,rec[j].exploer_info);
     }
//例子结束
    
    return 0;
}

//open file successful!
//输出GET请求所占比例: 0.818
//rec[0].status=200: 0.909
//rec[1].status=200: 0.909
//rec[2].status=200: 0.909
//rec[3].status=412: 0.091
//rec[4].status=200: 0.909
//rec[5].status=200: 0.909
//rec[6].status=200: 0.909
//rec[7].status=200: 0.909
//rec[8].status=200: 0.909
//rec[9].status=200: 0.909
//rec[10].status=200: 0.909
//访问最多的客户IP地址:233.102.79.50,共访问:11次

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//POST     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         412     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//POST     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko
//请按任意键继续. . .
qzjhjxj 2021-02-28
  • 打赏
  • 举报
回复
只剩第6题,供参考:
//题目要求是实现下面6个功能,我现在能写出的代码能实现前两个功能,和老师沟通过后,我代码存在的问题应该
//是没能把文件中信息存储在结构体中,我在代码中使用了strncpy_s函数,想把信息复制到结构体items中,但是后面
//的功能实现不了,已经卡在这里好久了,还是没有进步,能看看错在哪了吗?
//(1)对日志文件进行列表读取和写入;
//(2)计算日志文件中GET类型请求方式的占比;
//(3)对访问状态码进行分析与统计,计算所有访问状态码的比率;
//(4)分析访问最多的客户IP地址,并统计其访问次数;
//(5)分析常用密码,并统计密码使用次数;
//(6)用户输入时间段,查找该时间段内访问记录并输出到文件中


#include<stdio.h>
#include<string.h>

struct record       //结构体
{
    char method[255];  //[GET POST]
    char ip[255];      //[233.102.79.50]
    char protocol[255];//[HTTP/1.1]
    char time[255];    //[2021-01-18 08:57:44]
    char add[255];     //[http://39.99.254.200:8810]
    char page[255];    //[/admin/login.jsp]
    char port[255];    //[passwd=admin123&&password=123456]
    char status[255];  //[403]
    char exploer_info[255];//[Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko]
};

struct record rec[2048];//文件有2048行

int main(void)
{

    char line[1024];
    int  i=0,j,j_pos,j_pos1,pos[9],pos1[9];

    FILE *fp;
    fp=fopen("access.log","r+");//打开文件
    if(!fp){
        printf("false\n");
        return -1;
    }
    else{
        printf("open file successful!\n");
    }
    while((fgets(line,1024,fp))!=NULL){
         j_pos=0,j_pos1=0;
         for(j=0;j<strlen(line);j++){
            if(line[j]=='[') {pos[j_pos]=j;  j_pos++;} //'[' 位置标记
            if(line[j]==']') {pos1[j_pos1]=j;j_pos1++;}//']' 位置标记
         }
         strncpy(rec[i].method,      (line+pos[0]+1),pos1[0]-pos[0]-1);
         strncpy(rec[i].ip,          (line+pos[1]+1),pos1[1]-pos[1]-1);
         strncpy(rec[i].protocol,    (line+pos[2]+1),pos1[2]-pos[2]-1);
         strncpy(rec[i].time,        (line+pos[3]+1),pos1[3]-pos[3]-1);
         strncpy(rec[i].add,         (line+pos[4]+1),pos1[4]-pos[4]-1);
         strncpy(rec[i].page,        (line+pos[5]+1),pos1[5]-pos[5]-1);
         strncpy(rec[i].port,        (line+pos[6]+1),pos1[6]-pos[6]-1);
         strncpy(rec[i].status,      (line+pos[7]+1),pos1[7]-pos[7]-1);
         strncpy(rec[i].exploer_info,(line+pos[8]+1),pos1[8]-pos[8]-1);
         i++;
    }
    fclose(fp);//关闭文件

    char buf[255],bufk[255];
    int n=0,m=0,k,q,max_ip,max_pw;
    int *a = new int[i],*b = new int[i],*p = new int[i];//统计数组
    memset(a,0,sizeof(int)*i);  //数组初始化
    memset(b,0,sizeof(int)*i);
    memset(p,0,sizeof(int)*i);
    for(j=0;j<i;j++){
      if(strcmp(rec[j].method,"GET")==0)n++;//GET请求统计    第2题
      if(strlen(rec[j].port)>0)m++;         //统计使用密码登录的次数 第5题
      sscanf(rec[j].port,"%*[^&&]&&%[^\n]",buf); //取密码字符段
      for(k=0;k<i;k++){                                                                                                 
          if(strcmp(rec[j].status,rec[k].status)==0) b[j]++;//状态码进行分析统计 第3题
          if(strcmp(rec[j].ip,    rec[k].ip)==0)     a[j]++;//分析统计访问最多的客户IP地址 第4题
          sscanf(rec[k].port,"%*[^&&]&&%[^\n]",bufk);
          if(strcmp(buf,bufk)==0&&(strlen(rec[j].port)>0)&&(strlen(rec[k].port)>0))p[j]++;// 分析常用密码  第5题
      }
    }
    printf("GET请求所占比例:%6.3f\n",1.0*n/i);//输出GET请求所占百分比; 第2题
    max_ip = a[0];max_pw = p[0];k=0;q=0;
    for(j=0;j<i;j++){
        printf("rec[%d].status=%s:%6.3f\n",j,rec[j].status,b[j]*1.0/i);//输出所有访问状态码的比率 第3题
        if(max_ip<a[j]) {max_ip=a[j];k=j;}    // 找到访问最多次数的客户IP 第4题
        if(max_pw<p[j]) {max_pw=p[j];q=j;}    // 找到使用次数最多的密码   第5题
    }
    printf("访问最多的客户IP地址:%s,共访问:%d次.\n",rec[k].ip,a[k]);//输出访问最多的客户IP地址及次数 第4题
    sscanf(rec[q].port,"%*[^&&]&&%[^\n]",buf);
    printf("常用密码:%s,被用了%d次.在%d次登录中,%d次用密码登录.\n",buf,max_pw,i,m); //rec[q].port 第5题
    delete [] a;delete [] b;delete [] p;     //释放数组


//下面这段输出看看读入到rec[i]中的内容是否达预期目标,等程序调试完毕,这段可以删除,也可改成第6题的代码
//例子开始:
    for(j=0;j<i;j++)
     {
       printf("\n%s     %s     %s    %s    %s    %s     %s    %s     %s   \n",
       rec[j].method,rec[j].ip,    rec[j].protocol,
       rec[j].time,  rec[j].add,   rec[j].page,
       rec[j].port,  rec[j].status,rec[j].exploer_info);
     }
//结束
    
    return 0;
}

//open file successful!
//GET请求所占比例: 0.818
//rec[0].status=200: 0.909
//rec[1].status=200: 0.909
//rec[2].status=200: 0.909
//rec[3].status=412: 0.091
//rec[4].status=200: 0.909
//rec[5].status=200: 0.909
//rec[6].status=200: 0.909
//rec[7].status=200: 0.909
//rec[8].status=200: 0.909
//rec[9].status=200: 0.909
//rec[10].status=200: 0.909
//访问最多的客户IP地址:233.102.79.50,共访问:9次.
//常用密码:password=123456,被用了6次.在11次登录中,8次用密码登录.

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123455    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//POST     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         412     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123466    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.51     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//POST     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.80.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko
//请按任意键继续. . .
qzjhjxj 2021-02-27
  • 打赏
  • 举报
回复
这是调试成功的把文件信息转存到结构体中的代码,并做了第二题。看了楼主上面的代码,感觉还是概念没搞清,建议仔细研究下面的代码,搞懂了,其余几题再往里加功能,无非就是对数组数据的统计分析,供参考:
//题目要求是实现下面6个功能,我现在能写出的代码能实现前两个功能,和老师沟通过后,我代码存在的问题应该
//是没能把文件中信息存储在结构体中,我在代码中使用了strncpy_s函数,想把信息复制到结构体items中,但是后面
//的功能实现不了,已经卡在这里好久了,还是没有进步,能看看错在哪了吗?
//(1)对日志文件进行列表读取和写入;
//(2)计算日志文件中GET类型请求方式的占比;
//(3)对访问状态码进行分析与统计,计算所有访问状态码的比率;
//(4)分析访问最多的客户IP地址,并统计其访问次数;
//(5)分析常用密码,并统计密码使用次数;
//(6)用户输入时间段,查找该时间段内访问记录并输出到文件中


#include<stdio.h>
#include<string.h>

struct record       //结构体
{
    char method[255];  //[GET POST]
    char ip[255];      //[ip]
    char protocol[255];//[HTTP/1.1]
    char time[255];    //[2021-01-18 08:57:44]
    char add[255];     //[http://39.99.254.200:8810]
    char port[255];    //[/admin/login.jsp]
    char page[255];    //[passwd=admin123&&password=123456]
    char status[255];  //[403]
    char exploer_info[255];//[Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko]
};

struct record rec[2048];//文件有2048行

int main(void)
{

    char line[1024];
    int  i=0,n=0,j,j_pos,j_pos1,pos[9],pos1[9];

    FILE *fp;
    fp=fopen("access.log","r+");//打开文件
    if(!fp){
        printf("false\n");
        return -1;
    }
    else{
        printf("open file successful!\n");
    }
    while((fgets(line,1024,fp))!=NULL){
         j_pos=0,j_pos1=0;
         for(j=0;j<strlen(line);j++){
            if(line[j]=='[') {pos[j_pos]=j;  j_pos++;} //'[' 位置标记
            if(line[j]==']') {pos1[j_pos1]=j;j_pos1++;}//']' 位置标记
         }
         strncpy(rec[i].method,      (line+pos[0]+1),pos1[0]-pos[0]-1);
         strncpy(rec[i].ip,          (line+pos[1]+1),pos1[1]-pos[1]-1);
         strncpy(rec[i].protocol,    (line+pos[2]+1),pos1[2]-pos[2]-1);
         strncpy(rec[i].time,        (line+pos[3]+1),pos1[3]-pos[3]-1);
         strncpy(rec[i].add,         (line+pos[4]+1),pos1[4]-pos[4]-1);
         strncpy(rec[i].page,        (line+pos[5]+1),pos1[5]-pos[5]-1);
         strncpy(rec[i].port,        (line+pos[6]+1),pos1[6]-pos[6]-1);
         strncpy(rec[i].status,      (line+pos[7]+1),pos1[7]-pos[7]-1);
         strncpy(rec[i].exploer_info,(line+pos[8]+1),pos1[8]-pos[8]-1);
         i++; //文件行数
    }
    fclose(fp);//关闭文件


    for(j=0;j<i;j++){
      if(strcmp(rec[j].method,"GET")==0)n++;//GET请求统计 第二题
    }
    printf("输出GET请求所占比例:%f\n",1.0*n/i);//输出日志文件内容并统计计数,输出所占百分比;



    //下面这段输出看看读入到rec[i]中的内容是否达预期目标,等程序调试完毕,这段可以删除:
//例子开始:
    for(j=0;j<i;j++)
     {
       printf("\n%s     %s     %s    %s    %s    %s     %s    %s     %s   \n",
       rec[j].method,rec[j].ip,    rec[j].protocol,
       rec[j].time,  rec[j].add,   rec[j].page,
       rec[j].port,  rec[j].status,rec[j].exploer_info);
     }
//结束
    
    return 0;
}

//open file successful!
//输出GET请求所占比例:0.818182

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//POST     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         412     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp         200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//POST     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko

//GET     233.102.79.50     HTTP/1.1    2021-01-18 08:57:44    http://39.99.254.200:8810    /admin/login.jsp     passwd=admin123&&password=123456    200     Mozilla/5.0 (Windows NT 10.0: WOW64: Trident/7.0: rv:11.0) like Gecko
//请按任意键继续. . .
Pale1c 2021-02-27
  • 打赏
  • 举报
回复
课设就自己加油吧

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧