IT猫扑网文章教程

分类分类

wget curl c查看web服务器信息

2015-06-28 00:00作者:网管联盟

  来源于CU的一个帖子,问如何查看web服务器信息,忽然想起自己好像也比较想知道,遂google之

  [root@dbrg-2 ~]# curl -I www.baidu.com

  HTTP/1.1 200 OK

  Date: Wed, 29 Jul 2009 02:51:19 GMT

  Server: BWS/1.0

  Content-Length: 3509

  Content-Type: text/html

  Cache-Control: private

  Expires: Wed, 29 Jul 2009 02:51:19 GMT

  Set-Cookie: BAIDUID=0D5F54C0853B7C38D6BD3A3E5EA63C44:FG=1; expires=Wed, 29-Jul-39 02:51:19 GMT; path=/; domain=.baidu.com

  P3P: CP=& OTI DSP COR IVA OUR IND COM &

  [root@dbrg-2 ~]# wget -S --spider www.baidu.com

  --10:51:34-- http://www.baidu.com/

  => `index.html

  那么工具是实现了,如何用c来实现呢... 其实也很简单,我刚开始还走了点弯路想的是去查看wget or curl的源码,奈何那种代码相互之间依赖性太强实在不易阅读,于是自己用wireshark抓包, so easy!!!!有兴趣的自己去抓下

  #include <stdio.h>

  #include <stdlib.h>

  #include <unistd.h>

  #include <string.h>

  #include <sys/socket.h>

  #include <netinet/in.h>

  #include <netdb.h>

  #define HTTPPORT 80

  char* head =

  &HEAD / HTTP/1.0rn&

  &Accept: */*rn&

  &User-Agent: Wget/1.10.2 (Red Hat modified)rn&

  &Host:127.0.0.1rn&

  &Connection: Keep-Alivernrn&;

  int connect_URL(char *domain,int port)

  {

  int sock;

  struct hostent * host;

  struct sockaddr_in server;

  host = gethostbyname(domain);

  if (host == NULL)

  {

  printf(&gethostbyname errorn&);

  return -2;

  }

#p#副标题#e#

  sock = socket(AF_INET,SOCK_STREAM,0);

  if (sock < 0)

  {

  printf(&invalid socketn&);

  return -1;

  }

  memset(&server,0,sizeof(struct sockaddr_in));

  memcpy(&server.sin_addr,host->h_addr_list[0],host->h_length);

  server.sin_family = AF_INET;

  server.sin_port = htons(port);

  return (connect(sock,(struct sockaddr *)&server,sizeof(struct sockaddr)) <0) ? -1 : sock;

  }

  int main()

  {

  int sock;

  int ret;

  char buf[100];

  char *domain = &127.0.0.1&;

  FILE* fp = fopen(&test&,&w+&);

  if(NULL == fp){

  printf(&can't open stockcode file!n&);

  return -1;

  }

  sock = connect_URL(domain,HTTPPORT);

  if (sock <0){

  printf(&connetc errn&);

  return -1;

  }

  send(sock,head,strlen(head),0);

  while(1)

  {

  if((ret=recv(sock,buf,100-1,0))<1)

  break;

  buf[ret]='';

  printf(&%s&, buf);

  fprintf(fp,&%s&,buf); //save http data

  }

  fclose(fp);

  close(sock);

  //printf(&bye!n&);

  return 0;

  }

展开全部

相关文章

说两句网友评论
    我要跟贴
    取消