程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c/c++----網站及其後門(CGI應用程序),----cgi

c/c++----網站及其後門(CGI應用程序),----cgi

編輯:C++入門知識

c/c++----網站及其後門(CGI應用程序),----cgi


C/C++學習到這兒,結合自己曾經學過的javasweb知識,現在讓我們來看看,如何做一個CGI程序吧!

首先了解一下啥子叫CGI  :CGI全稱是“公共網關接口”(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行“交談”的一種工具,其程序須運行在網絡服務器上。    ----來自百度百科

1.  首先,我們需要 Apache server2.0(學習web,應該必須知道這個的,嘻嘻),安裝好該軟件之後,也許會出現很多的問題,導致打不開什麼的。喵了個咪的,博主本人曾經也是搞了老半天,不過最後,還是搞定了!

(1). 其實主要情況,我遇到就兩種,第一種,就是我們為了節約開機時間,將IIS關閉了,或者有些俠客直接將它卸載了! 所以導致打不開!  

面對這種問題,下一個就好了!  Apache server2.0 需要 IIS 配合。 

(2). 第二種就是80端口被占用了,這是最容易發生的情況沒有之一。  解決的方法有很多,但是個人比較喜歡這樣來搞。

cmd --》 net -ano   --->查看那些占用了80端口(一般是浏覽器什麼的居多) 幾下他們的  PID ,然後在進程管理哪兒關閉就好了!

上面的Apache server 運行起來之後,就在浏覽器中 敲入 localhost ,會顯示一個

然後修改一個,http.cof文件   

找到倆個位置:

第一個位置: #  AddHandler cgi-script .cgi   將這個語句的前面#注釋符去掉

第二個位置: 

<Directory "D:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">

AllowOverride None

Options None    -----將這個位置替換為:    Options Indexes ExecCGI

Order allow,deny

Allow from all

</Directory>

這兩個位置配置好之後。就可以用C/C++編程了!

第一步:我們編寫一個這樣的文件

1 #include<stdio.h>

2 int main(int args ,char * argv []) {

3   

4     printf("Content-type:text/html\n\n");

5     printf("hello world ! 我是cgi ");

6     getchar();

7   return 0;

8 }

編譯,生成一個這樣的 hello.exe文件、生成之後,我們將hell.exe的屬性改為 hello.cgi

然後將其放置到,自己安裝的Apache server2.0文件中的cgi-bin文件下

在浏覽器中,再輸入,localhost/cgi-bin/hello.cgi  就可以看到這樣的畫面

2. 那麼說了這麼多,我們又該用c/c++寫一個cgi來做後台,在背後來操作這個數據呢! 

首先,我們需要寫一個html,做個web的,對於這些當然,是再easy不過了! 為了節約時間,就寫一個簡陋點的html吧!!

1 <html>

2 <head>

3   <title>後台</title>

4 </head>

6 <body>

7             <h1> 後台界面</h1>

8  <form action="http://localhost/cgi-bin/gxjun.cgi" method="post" id=CGI >

9   

10   請輸入命令cmd: <input  type="text"  name="textlist"     /><br><br>  

11   <input  type="submit"    /><br>

12  </form>

13  <hr>

14 <body>

15 </html>

當然,這個當我們在做web的時候,這個是可以內嵌到,我們的項目中的!在於你將這個jsp放到哪個地兒啦!

最後就是重點了! 就像我上面寫的cgi一樣! 寫一個下面這樣的代碼:

1 #define  _CRT_SECURE_NO_WARNINGS

2 #include<stdio.h>

3 #include<stdlib.h>

4 //#include<stdexcept>

5 #include<windows.h>

7 //以調用System為舉例

8 void func(char ps []) {

9     // ps 為cmd命令

10     char *pl = strchr(ps,'=');  //pl指向當前的位置

11     if(pl!=NULL)   ps = ps + (pl-ps+1);

12      printf("命令cmd = %s\n", ps);

13     char cmd[256] = {'\0'};

14     char  filename[]  = "Gxjun.txt";   //暫定放置於當前目錄。

15     sprintf(cmd,"%s > %s ",ps,filename);  //將ps的內容寫入cmd中

16     //生成了一條指令

17     //無論是否執行成功,都會生成一個Gxjun.txt文件

18     FILE *fp = NULL;

19     int tag=system(cmd);  

20     if (tag == 1) {

21         printf("命令格式錯誤!,請重新輸入: ");

22         goto loop;

23     }

24     if ((fp = fopen(filename, "r")) == NULL) {

25         printf("沒有發現文件!");

26         goto loop ;

27      }

28 

29      while (!feof(fp)) {

30          char str=fgetc(fp);

31           if (str == '\n') printf("<br><br>\n\n");

32           else if (str == ' ')printf(" ");

33           else

34               printf("%c",str);

35      }

36 

37  loop:

38      if (fp != NULL){

39          fclose(fp);

40          //並刪除備份的文件

41          system("del Gxjun.txt");

42      }

43      return ;

44 }

45 

46 

47 int main(int args ,char * argv []) {

48   

49     printf("Content-type:text/html\n\n");

50     //打印環境變量

51     printf("   %s<br><br>", getenv("QUERY_STRING"));

52     char szPost[256] = {'\0'};

53     gets(szPost);  //獲取輸入    

54     if ( strlen(szPost) < 1 )

55         strcpy( szPost , "ipconfig" );

56     func(szPost);

57     getchar();

58   return 0;

59 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved