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);//从浏览器获取到的输入时改变312编码方式 需要转换成汉字 才能进行查找
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服务器需要在实际的文本信息开始之前先看见一个空行。

时间: 2024-10-07 21:50:56

CGI编程学习----查询2000W开房数据的相关文章

CGI编程学习

@CGI编程学习 目录(?)[+] 一.基本原理 CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口.通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端. 组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面.另一部分则是运行在服务器上的Cgi程序. 它们之间的通讯方式如下图: 服务器 客户端 CGI程序 HTTP通信 标准输入输出 (环境

网络编程学习小结

几种网络编程方式: ISAPI.CGI.WinInet.Winsock 它们之间的差别: 1)  ISAPI主要是开发基于浏览器client与server端程序.效率比CGI方式高,并且也扩展了CGI没有的一些功能.(基于TCP/IP模型中的应用层) 2)  CGI主要是开发基于浏览器client与server端程序.(基于TCP/IP模型中的应用层) 3)  WinInet主要是开发client程序.(基于TCP/IP模型中的应用层) 4)  Winsock主要是基于socket来开发clie

Linux CGI编程基础【整理】

Linux CGI编程基础 1.为什么使用CGI? 如前面所见,任何的HTML均是静态网页,它无法实现一些复杂的功能,而CGI可以为我们实现.如:a.列出服务器上某个目录中的文件,对目录中的文件进行操作:b.通过CGI实现串口通讯:c.实现数据库接口:d.实现从摄像头读取一张图片显示在网页上… 等等 2. CGI是什么? CGI全称是 Common Gate Intergace ,在物理上,CGI是一段程序,它运行在Server上,提供同客户端 Html页面的接口. 3. CGI编程语言 你可以

Windows API 编程学习记录&lt;三&gt;

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

数据持久化编程学习总结

一.JDBC编程 1. 使用JDBC规范 在数据库编程方面,最先使用的数据持久化技术无疑是JDBC 可以说JDBC(Java Data Base Connectivity)是学习其它数据持久化技术的基础 Java中访问数据库使用的就是JDBC,基本操作有CRUD(Create-Read-Update-Delete) JDBC定义了数据库的连接,SQL语句的执行以及查询结果集的遍历,一般操作步骤如下: 1.      注册驱动:DriverManager.registerDriver(driver

python cgi 编程

python默认自带了几个和web相关的模块.原来只知道SimpleHTTPServer 这个模块,后来又知道了 CGIHTTPServer 这个模块 SimpleHTTPServer 1 python -m SimpleHTTPServer 80 在命令行里键入上面的命令就有了一个简单的HTTP服务器了,服务器的端口是 80 (也可以是别的,如果80端口被占用了) -m 的意思就是 module,web的根目录是命令行的当前目录  (win7 下 在一个文件夹空白的地方 shift+鼠标右键

JAVA GUI编程学习笔记目录

1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之GUI编程窗体事件 6.JAVA之GUI编程Action事件 7.JAVA之GUI编程鼠标事件 8.JAVA之GUI编程键盘码查询器 9.JAVA之GUI编程列出指定目录内容 10.JAVA之GUI编程弹出对话框Dialog 11.JAVA之GUI编程菜单 12.JAVA之GUI编程打开与保存文件 13.JAVA之GUI编程将程序打包jar JA

linux网络编程学习笔记之六 -----I/O多路复用服务端

多进程和多线程的目的是在于最大限度地利用CPU资源,当某个进程不需要占用太多CPU资源,而是需要I/O资源时,可以采用I/O多路复用,基本思路是让内核把进程挂起,直到有I/O事件发生时,再把控制返回给程序.这种事件驱动模型的高效之处在于,省去了进程和线程上下文切换的开销.整个程序运行在单一的进程上下文中,所有的逻辑流共享整个进程的地址空间.缺点是,编码复杂,而且随着每个逻辑流并发粒度的减小,编码复杂度会继续上升. I/O多路复用典型应用场合(摘自UNP6.1) select的模型就是这样一个实现

Python CGI编程

cgi.FieldStorage() 访问作为web请求一部分发送给web服务器的数据,数据作为一个python字典. CGI是什么? 通用网关接口或CGI,是一组定义信息如何在Web服务器和自定义脚本之间交换的标准. CGI规范目前保持是由NCSA 和 NCSA 维护和定义如下. 通用网关接口或CGI,是外部网关方案,如HTTP服务器的信息服务器的接口标准. 目前的版本是CGI/1.1,而CGI/1.2目前正在定制中. 网页浏览 要了解CGI的概念,让我们看看当点击一个超链接,浏览某一个网页或