CGI编程学习----查询2000W开房数据
0x01:什么是CGI编程?
CGI:Common Gateway Interface
CGI代表Common Gateway Interface(通用网关界面),它使在网络服务器下运行外部分应用程序(或网关)成为可能。
CGI-BIN 目录是存放CGI脚本的地方。
这些脚本使WWW服务器和浏览器能运行外部程序,而无需启动另一个原因程序。
它是运行在Web服务器上的一个程序,并由来自于浏览者的输人触发。CGI是在HTTP服务器下运行外部程序(或网关)的一个接口,它能让网络用户访问远程系统上的使用类型程序,就好像他们在实际使用那些远程计算机一样。 CGI能够让浏览者与服务器进行交互,如果你曾经遇到过在网络上填表或者进行搜索,就很有可能就是用的CGI。
0x02:用什么语言可以编写CGI编程?
CGI应用程序可以由大多数的编程语言编写,如Perl(Practical Extraction and Report Language)、C\C++、Java 和Visual Basic等。不过对于那些没有太多编程经验的网页制作人来说,实在是一个不小的难题(测试CGI程序需要html测试文件)。
0x03:CGI应用程序的工作原理
1.浏览器通过HTML表单或超链接请求指上一个CGI应用程序的URL。
2.服务器收发到请求。
3.服务器执行指定所CGI应用程序。
4.CGI应用程序执行所需要的操作,通常是基于浏览者输人的内容。
5.CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。
6.网络服务器把结果返回到浏览器中。
0x04:CGI程序实现
C语言实现代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 char from_hex(char ch) 6 { 7 return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10; 8 } 9 10 char * gb2312_to_chinese(char *gb2312)//将gb2312编码转换为汉字 11 { 12 if (strstr(gb2312, "%")) 13 { 14 char *buf = (char *)malloc(strlen(gb2312) + 1); 15 char *pstr = gb2312; 16 char *pbuf = buf; 17 while (*pstr) 18 { 19 if (*pstr == '%') 20 { 21 if (pstr[1] && pstr[2]) 22 { 23 *pbuf++ = from_hex(pstr[1]) << 4 | from_hex(pstr[2]); 24 pstr += 2; 25 } 26 } 27 else if (*pstr == '+') 28 { 29 *pbuf++ = ' '; 30 } 31 else 32 { 33 *pbuf++ = *pstr; 34 } 35 pstr++; 36 } 37 *pbuf = '\0'; 38 return buf; 39 } 40 } 41 42 void main() 43 { 44 printf("Content-type:text/html \n\n");//HTML语言 45 char searchstr[256] = ""; 46 gets(searchstr);//从浏览器获得输入 47 char *p = strchr(searchstr, '&');//处理从浏览器获取的输入,去掉多余的部分 searchstr[256] = "我们的输入&%ds%ads%fadsa8d8hd" 48 if (p != NULL) 49 { 50 *p = '\0'; 51 } 52 char *pstart = searchstr + 10; 53 pstart = gb2312_to_chinese(pstart);//从浏览器获取到的输入是gb2312编码方式 需要转换成汉字 才能进行查找 54 int j = 0; 55 char pathr[200] = "kaifang.txt"; 56 FILE *pfr = fopen(pathr, "r");//打开开房数据 57 if (pfr == NULL) 58 { 59 puts("打开失败"); 60 return; 61 } 62 else 63 { 64 while (!feof(pfr)) 65 { 66 char buffer[256] = { 0 }; 67 fgets(buffer, 256, pfr); 68 char *p = strstr(buffer, pstart); 69 if (p != NULL) 70 { 71 j++;//计数器 72 puts(buffer); 73 puts("<br><br>");//换行 74 } 75 } 76 puts("<br><br>");//换行 77 printf("找完了,找到 %d 个 %s ", j, pstart); 78 puts("<br><br>");//换行 79 puts("<br><br>");//换行 80 } 81 }
测试CGI程序所用的html文件:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 5 <title>酒店开房记录查询</title> 6 <style> 7 a:visited{color:#0000FF;} 8 #div{width:600px;margin:0 auto}; 9 </style> 10 </head> 11 <body> 12 <div id="div"> 13 <table style="line-height:1px;"> 14 <tr> 15 <td> 16 <p align="center"><img src="logo.gif" width="270" height="129" usemap="#mp"/></p> 17 </td> 18 </tr> 19 <tr> 20 <td> 21 <p align="center"> 22 <form id = "form" name = "form" method = "post" action = "http://127.0.0.1/cgi-bin/xxoo.cgi"> 23 <input type="text" name="searchstr" style="width:400px;height:30px;" placeholder="请输入你的那个他(她),看看有没有出轨"/> 24 <input type="submit" name="sousuoanniu" value="猥琐一下" style="width:95px;height:35px;" /> 25 </p> 26 </td> 27 </tr> 28 <tr> 29 <tr> 30 <tr> 31 <tr> 32 <td> 33 <p align="center"> 34 <font size="2">酒店开放记录查询 已经总共2000万用户信息泄漏</font> 35 36 </p> 37 <br> 38 <br> 39 <br> 40 <br> 41 <br> 42 <br> 43 <br> 44 <p align="center"> 45 <font size="2"> 46 友情提醒:数据来源于网络仅供参考,使用时请遵守当地法律法规 47 48 </font> 49 </p> 50 </td> 51 </tr> 52 </table> 53 </div> 54 </body> 55 </html>
0x05:测试效果
环境:Apache2.2,WIN8.1
找到Apache的安装目录将写好的CGI程序生成为.exe可执行程序,将后缀改为.cgi然后放在Apache 2.2\cgi-bin目录下
将测试CGI程序所用的html文件放在Apache 2.2\htdocs目录下
效果:
0x06:注意
printf("Content-type:text/html \n\n");//HTML语言
此行通过标准输出将字符串″Contenttype:text/plain/n/n″传送给Web服务器。它是一个MIME头信息,它告诉Web服务器随 后的输出是以纯ASCII文本的形式。请注意在这个头信息中有两个换行符,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。
CGI编程学习----查询2000W开房数据相关推荐
- Perl/CGI脚本语言编程学习资料及开发工具下载大全
Practical Extraction and Report Language Perl 最初的设计者为拉里·沃尔(Larry Wall),它于1987年12月18日发表.Perl借取了C.sed. ...
- 新手学习【菜鸟教程】Python CGI编程的几个坑(Windows系统)
写在前面的话 作为新手,在window10系统中学习Python CGI编程,按照教程却发现无法运行,终于解决各种坑,记录在次供小白参考,也欢迎大神指正. 下面我分安装.配置和调试两部分来讲. 安装 ...
- html网页和cgi程序编程,CGI 编程方式学习
1.大家都知道CGI是通用网关接口,可以用来编写动态网页.而且CGI可以用很多种语言来写,用perl来编写最常见, 我这里就是用perl来编写做例子.讲到编写CGI编程方式,编写CGI有两程编程风格. ...
- android 如何读取cgi_Python基础教程(十):CGI编程、MySQL数据库
Python CGI编程 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如: ...
- python cgitb_python CGI 编程实践
文章更新于:2020-03-05 一.Web服务器的支持与配置 在进行CGI编程之前,请确保Web服务器支持CGI,它被配置为处理CGI程序.所有对由HTTP服务器执行的CGI程序保存在一个预先配置的 ...
- 窗口消息——Windows核心编程学习手札之二十六
窗口消息 --Windows核心编程学习手札之二十六 Windows允许一个进程至多建立10000个不同类型的用户对象(user object):图符.光标.窗口类.菜单.加速键表等,当一个线程调用一 ...
- 虚拟内存——Windows核心编程学习手札之十四
虚拟内存 --Windows核心编程学习手札之十四 系统信息 有些操作系统的值是根据主机而定的,如页面大小.分配粒度大小等,这些值不用硬编码形式,进程初始化时应检索这些值以使用.函数GetSystem ...
- 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七
线程的调度.优先级和亲缘性 --Windows核心编程学习手札系列之七 每个线程都拥有一个上下文结构,在线程的内核对象中,记录线程上次运行时该线程的CPU寄存器状态.Windows会每隔20ms左右查 ...
- 作业——Windows核心编程学习手札系列之五
作业 --Windows核心编程学习手札系列之五 Windows提供作业内核对象,可以将进程组合在千毫 ,并创建一个"沙框"以便限制进程能够进行的操作.作业可视为进程的容器,win ...
- Python基础教程(十):CGI编程、MySQL数据库
Python CGI编程 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如: ...
最新文章
- C++中MessageBox()的详细用法(转载)
- 基于 RT-Thread的麦克纳姆轮小车循迹运动控制算法开发和研究
- mysql里面的sql_mysql工作中的sql
- cambridge ccaf potential supervisors!
- 网骗欺诈?网络裸奔?都是因为 HTTP?
- NYOJ 24 素数距离问题
- oracle 关于归档的视图,oracle 与归档日志相关的几个视图
- Mybatis异常_02_Result Maps collection already contains value for
- vscode,git提交push,需要每次都输入账号密码username,password
- 22_python基础—异常
- c语言中图像处理相关函数,C语言图像处理函数大全
- ubuntu18 安装mysql8安装包_Ubuntu18.04深度学习环境配置
- Adobe Dreamweaver 2021下载与安装教程
- 硕士论文查重原理是什么?
- python网页登录模板
- inter至强服务器处理器型号,Intel发布新处理器,用金/银作为型号区分
- 悉尼大学COMP5216Assignment2课业解析
- c语言情话编程,用c语言写的情话
- Java实验4-1【数组下标越界异常处理】
- python自带的程序编辑器有哪些菜单_python自带的编辑器是