基於C與Socket編寫了一個HTTP頁面檢查程序,通過這個程序,可以加載指定WEB服務器上的頁面信息,這在爬蟲、抓取WEB頁面、分析是否有掛馬行爲有參考意義。
代碼如下:
//---
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <winsock2.h>
#include<time.h>
char *checkhttp(char *path)
{
WSADATA ds_Data;
SOCKET ds_ClientSocket ;
struct sockaddr_in ds_ServerAddr ;
char recvbuf[1000000];
if(WSAStartup(MAKEWORD(2,2),&ds_Data)!=0)
{
printf("無法加載套接字協議棧\n");
return NULL;
}
ds_ServerAddr.sin_family = AF_INET ;
ds_ServerAddr.sin_port = htons(80) ;
if(path == NULL)
return NULL;
ds_ServerAddr.sin_addr.s_addr = inet_addr( path ) ;
ds_ClientSocket = socket(AF_INET,SOCK_STREAM,0) ;
if(ds_ClientSocket==INVALID_SOCKET)
{
printf("套接字初始化出現錯誤;錯誤號:%d\n",WSAGetLastError());
return NULL;
}
if( connect(ds_ClientSocket,(struct sockaddr *)&ds_ServerAddr,sizeof( ds_ServerAddr ) )==INVALID_SOCKET)
{
printf("連接服務器出現錯誤;錯誤號:%d\n",WSAGetLastError());
return NULL;
}
char buf[1023];
strcpy(buf,"Get / HTTP 1.0\r\n");
send( ds_ClientSocket,buf,strlen(buf),0 );
printf("發送完畢");
int iLen=recv( ds_ClientSocket,recvbuf,1000000,0 );
if(iLen==SOCKET_ERROR || iLen <= 0 ||iLen != (int )strlen(recvbuf))
{
printf("出現失誤");
return NULL;
}
printf("%s",recvbuf);
return recvbuf;
}
void main()
{
checkhttp("172.16.1.1");
}