79.cgi硬盘查询个人信息

运行截图:

  • 把cgi编码转为char*类型
     1 //把cgi编码转为char*类型
     2 char* change(char *str)
     3 {
     4     //分配内存
     5     char *tempstr = malloc(strlen(str) + 1);
     6 
     7     //x是tempstr的下标,y是str的下标
     8     int x = 0, y = 0;
     9     char assii_1, assii_2;
    10     while (str[y])
    11     {
    12         if ((tempstr[x] = str[y]) == '%')
    13         {
    14             //获取第一个字符
    15             if (str[y + 1] >= 'A')
    16             {
    17                 assii_1 = str[y + 1] - 55;
    18 
    19             }
    20             else
    21             {
    22                 assii_1 = str[y + 1] - 48;
    23             }
    24             //获取第二个字符
    25             if (str[y + 2] >= 'A')
    26             {
    27                 assii_2 = str[y + 2] - 55;
    28             }
    29             else
    30             {
    31                 assii_2 = str[y + 2] - 48;
    32             }
    33             tempstr[x] = assii_1 * 16 + assii_2;
    34 
    35             y += 2;
    36 
    37         }
    38         x++;
    39         y++;
    40     }
    41     //最后一位置零
    42     tempstr[x] = '';
    43     return tempstr;
    44 }
  • 查询
     1 //查询
     2 void showlist(char str[256])
     3 {
     4     
     5     
     6     printf("%s%s
    ", str,str);
     7     //文件指针
     8     FILE *pf;
     9     //读取
    10     pf = fopen(strpath, "r");
    11     
    12     if (pf == NULL)
    13     {
    14         printf("文件打开失败");
    15     }
    16     else
    17     {
    18         //没有到文件末尾就继续
    19         while (!feof(pf)) 
    20         {
    21             char readstr[1024] = { 0 };
    22             //读取一行
    23             fgets(readstr, 1024, pf);
    24             //字符串查找
    25             char *p = strstr(readstr, str);
    26             if (p != NULL)
    27             {
    28                 //输出到网页
    29                 //puts(readstr);
    30                 printf("%s",readstr);
    31                 puts("<br>");
    32             }
    33         }
    34         fclose(pf);
    35     }
    36 }
  • 主函数
     1 printf("Content-type:text/html
    
    ");//换行
     2     
     3     //等待一下
     4     system("mkdir 1");
     5     //获取表单的数据到szpost中   格式 cmd1=%BD%C8&cmd2=abc
     6     char szpost[256] = { 0 };
     7     gets(szpost);
     8     printf("%s", szpost);
     9 
    10     //找到第一个输入框的内容
    11     char*p1 = strchr(szpost, '&');
    12     if (p1 != NULL)
    13     {
    14         *p1 = '';
    15     }
    16     //输出相应的信息
    17     printf("<br>%s", szpost + 5);
    18     //cgi编码格式转换为char*类型
    19     printf("<br>%s", change(szpost + 5));
    20 
    21 
    22     //获取第二个输入框的内容
    23     char *p2 = strchr(p1 + 1, '&');
    24     if (p2 != NULL)
    25     {
    26         *p2 = '';
    27     }
    28     printf("<br>%s", p1 + 6);
    29     printf("<br>%s", change(p1 + 6));
    30 
    31     //查询
    32     showlist(change(szpost + 5));

完整代码

  1 #define  _CRT_SECURE_NO_WARNINGS
  2 #include<stdio.h>
  3 #include<stdlib.h>
  4 #include <string.h>
  5 
  6 //把cgi编码转为char*类型
  7 char* change(char *str)
  8 {
  9     //分配内存
 10     char *tempstr = malloc(strlen(str) + 1);
 11 
 12     //x是tempstr的下标,y是str的下标
 13     int x = 0, y = 0;
 14     char assii_1, assii_2;
 15     while (str[y])
 16     {
 17         if ((tempstr[x] = str[y]) == '%')
 18         {
 19             //获取第一个字符
 20             if (str[y + 1] >= 'A')
 21             {
 22                 assii_1 = str[y + 1] - 55;
 23 
 24             }
 25             else
 26             {
 27                 assii_1 = str[y + 1] - 48;
 28             }
 29             //获取第二个字符
 30             if (str[y + 2] >= 'A')
 31             {
 32                 assii_2 = str[y + 2] - 55;
 33             }
 34             else
 35             {
 36                 assii_2 = str[y + 2] - 48;
 37             }
 38             tempstr[x] = assii_1 * 16 + assii_2;
 39 
 40             y += 2;
 41 
 42         }
 43         x++;
 44         y++;
 45     }
 46     //最后一位置零
 47     tempstr[x] = '';
 48     return tempstr;
 49 }
 50 
 51 //定义路径
 52 char strpath[256] = "kaifang.txt";                                                                                
 53 
 54 //查询
 55 void showlist(char str[256])
 56 {
 57     
 58     
 59     printf("%s%s
", str,str);
 60     //文件指针
 61     FILE *pf;
 62     //读取
 63     pf = fopen(strpath, "r");
 64     
 65     if (pf == NULL)
 66     {
 67         printf("文件打开失败");
 68     }
 69     else
 70     {
 71         //没有到文件末尾就继续
 72         while (!feof(pf)) 
 73         {
 74             char readstr[1024] = { 0 };
 75             //读取一行
 76             fgets(readstr, 1024, pf);
 77             //字符串查找
 78             char *p = strstr(readstr, str);
 79             if (p != NULL)
 80             {
 81                 //输出到网页
 82                 //puts(readstr);
 83                 printf("%s",readstr);
 84                 puts("<br>");
 85             }
 86         }
 87         fclose(pf);
 88     }
 89 }
 90 
 91 void main()
 92 {
 93     printf("Content-type:text/html

");//换行
 94     
 95     //等待一下
 96     system("mkdir 1");
 97     //获取表单的数据到szpost中   格式 cmd1=%BD%C8&cmd2=abc
 98     char szpost[256] = { 0 };
 99     gets(szpost);
100     printf("%s", szpost);
101 
102     //找到第一个输入框的内容
103     char*p1 = strchr(szpost, '&');
104     if (p1 != NULL)
105     {
106         *p1 = '';
107     }
108     //输出相应的信息
109     printf("<br>%s", szpost + 5);
110     //cgi编码格式转换为char*类型
111     printf("<br>%s", change(szpost + 5));
112 
113 
114     //获取第二个输入框的内容
115     char *p2 = strchr(p1 + 1, '&');
116     if (p2 != NULL)
117     {
118         *p2 = '';
119     }
120     printf("<br>%s", p1 + 6);
121     printf("<br>%s", change(p1 + 6));
122 
123     //查询
124     showlist(change(szpost + 5));
125 }
原文地址:https://www.cnblogs.com/xiaochi/p/8455855.html