close

這幾天心血來潮想研究一下在win32下面如何利用Socket來連線,因為新的程式語言太方便了,所以自從大一之後就沒再用過C語言寫一些底層的東西,很多連線的程式我大多都用JAVA或者是perl跟PHP來撰寫,不過目前常看到的病毒以及木馬很多都用C寫成,以後工作搞不好難免也要分析這些東西,乾脆趁現在比較閒的時候來複習一下C語言好了。

=================這篇完全是一篇心得備忘(對程式碼有興趣的再點吧)=================


原本想說寫個http client好了,上Google找了一下,看到蠻多unix下面的sample code就是沒看到windows的,所以拿了之前的程式來改一改,說到這邊不能不推一下ethereal,Sniffer真是撰寫Socket程式的好幫手阿,廢話不多說,下面是Source Code,使用Dev C++ 4.9.9.2編譯,編譯時需要在"工具->編譯器選項->當呼叫編譯器時加入下面命令"的地方加上一個"-lws2_32"參數:

#include <windows.h>
#include <stdio.h>

int main (int argc, char *argv[]) {
    SOCKET sockfd;
    WSADATA wsaData;
    #define bufsize 300
    struct hostent *host; 
    struct sockaddr_in dest_addr;       
    char *Rec_Buf = (char*) malloc(bufsize+1);
    char request[1000];
    int rec;
   
    if(argc!=3){
     printf("\nUsage:%s [Server IP/DN] [webpage]\n\n",argv[0]);
     printf("For example:\n%s 127.0.0.1 index.html\n",argv[0]);
     exit(1);
    }
    if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
      WSACleanup();
      return -1;
    }
    if ( (host=gethostbyname(argv[1])) == NULL) {
       perror("gethostbyname");
       exit(1);
    }
    memset(&dest_addr,0,sizeof(dest_addr));
    memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);

    dest_addr.sin_family= host->h_addrtype; 
    dest_addr.sin_port= htons(80);


     if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
        perror("socket");
        exit(1);
        }
 
    if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
        perror("connect");
        exit(1);
        }
       
    sprintf(request, "GET /%s HTTP/1.0\n\n", argv[2]);
    send(sockfd,request,strlen(request),0);
   
    do{
       rec=recv(sockfd,Rec_Buf,bufsize,0);
       if(rec > 0){
              printf("%s",Rec_Buf);
       }
    }
    while(rec > 0);
    #ifdef WIN32
    closesocket(sockfd);
    WSACleanup();
    #else
    close(sockfd);
    #endif
}































































這支程式會將web server接受到http request之後的訊息print出來,如果要做進階應用像是自動產生特殊的http request或者是要做sql injection tool都可以再做擴充的應用。


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 nsysumis94 的頭像
    nsysumis94

    Nightmare的胡言亂語

    nsysumis94 發表在 痞客邦 留言(6) 人氣()