(转载)基于Socket与C的WEB页面抓取程序
基于C与Socket编写了一个HTTP页面检查程序,通过这个程序,可以加载指定WEB服务器上的页面信息,这在爬虫、抓取WEB页面、分析是否有挂马行为有参考意义。
代码如下:
- <span xmlns="http://www.w3.org/1999/xhtml" style="">//---
- #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");
- }
- </span>