⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 269.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="192.htm">上一层</a>][<a href="270.htm">下一篇</a>]
<hr><p align="left"><small>寄信人: guru.bbs@bbs.gznet.edu.cn <br>

标  题: [转寄] FreeProxyScan <br>

注  意: 站外信件 <br>

日  期: Mon Aug  6 20:05:18 2001 <br>

  <br>

/* free proxy搜索程序,运行于UNIX平台                    */ <br>

/* 用法: 程序名  起始IP地址  结束IP地址   日志文件      */ <br>

/* 搜索结果存于日志文件中                               */ <br>

/* 作者: Happy(Netguy)                                  */ <br>

  <br>

#include <stdio.h> <br>

#include <netinet/in.h> <br>

#include <sys/types.h> <br>

#include <sys/socket.h> <br>

#include <sys/signal.h> <br>

#include <sys/time.h> <br>

#include <fcntl.h> <br>

#include <unistd.h> <br>

  <br>

#define  N          11 <br>

#define  ZERO       (struct fd_set *)0 <br>

  <br>

int              port[N]={ 80,81,88,8083,8080,8001,8888,3128,3124,3000,1080}; <br>



                                             /* 欲搜的端口号 */ <br>

int              status; <br>

struct in_addr   serverIP; <br>

char             serverName[20]; <br>

int              sockfd; <br>

struct timeval   timeout; <br>

struct fd_set    mask; <br>

FILE             *f; <br>

char             errorCode; <br>

int              errorLen; <br>

u_long           startIP,endIP,k; <br>

  <br>

void terminate(void)                    /* 处理SIGTERM信号 */ <br>

{ <br>

    fprintf(f,"Program killed at %s\n",serverName); <br>

    exit(0); <br>

} <br>

  <br>

void findProxy(u_long addr) <br>

{ <br>

        int i; <br>

        struct sockaddr_in host; <br>



  <br>

      /* 若连上了某个主机,则看其所有有可能提供proxy服务的端口 */ <br>

  <br>

        for(i=0;i<N;i++) <br>

      { <br>

        host.sin_family=AF_INET; <br>

        host.sin_addr.s_addr=htonl(addr); <br>

        host.sin_port=htons(port[i]); <br>

  <br>

        if ( (sockfd=socket(AF_INET,SOCK_STREAM,0))<0 ) <br>

        { fprintf(f,"socket( ) error at %s\t%d\n",serverName,port[i]); <br>

          exit(-1); <br>

        } <br>

  <br>

        if(fcntl(sockfd,F_SETFL,O_NDELAY) < 0 )   /* 非阻塞式socket */ <br>

        { fprintf(f,"fcntl() error at %s\t%d\n",serverName,port[i]); <br>

          exit(-1); <br>

        } <br>

  <br>

        status=connect(sockfd,(struct sockaddr *)& host,sizeof(host)); <br>

        timeout.tv_sec=2; <br>

        timeout.tv_usec=0;                      /* 超时限制 */ <br>



        FD_ZERO( & mask); <br>

        FD_SET(sockfd,& mask); <br>

        status=select(sockfd+1,ZERO,& mask,ZERO,& timeout); <br>

        switch(status) <br>

        { case -1: <br>

             fprintf(f,"select( ) error at %s\t%d\n",serverName,port[i]); <br>

             exit(-1); <br>

          case 0:                     /* 连接超时则继续扫下一个IP地址 */ <br>

             close(sockfd); <br>

             return; <br>

          default:                              /* 连上了 */ <br>

             if(  FD_ISSET(sockfd,& mask) ) <br>

             { errorCode=1; <br>

               errorLen=sizeof(errorCode); <br>

               getsockopt(sockfd,SOL_SOCKET,SO_ERROR,&errorCode,&errorLen); <br>

               if(errorCode==0) <br>

                   fprintf(f,"%s\t%d\n",serverName,port[i]); <br>

              } <br>

        } <br>

        close(sockfd); <br>

        fflush(f); <br>

      } <br>

      } <br>

} <br>

/*===========================================================================*/ <br>

main(int argc,char *argv[]) <br>

{ <br>

  <br>

  int i; <br>

  <br>

  if(argc!=4) <br>

  { printf("Usage: %s  startIP endIP logFile\n",argv[0]); <br>

    exit(-1); <br>

  } <br>

  <br>

  startIP=ntohl(inet_addr(argv[1]));            /* 搜索的IP范围 */ <br>

  endIP=ntohl(inet_addr(argv[2]));          /* 保证endIP大于startIP     */ <br>

  if(startIP>endIP) <br>

  { k=startIP; <br>

    startIP=endIP; <br>

    endIP=k; <br>

  } <br>

  <br>

  f=fopen(argv[3],"a");                 /* 打开日志文件 */ <br>

  if(f==NULL) <br>

  if(f==NULL) <br>

  { printf("Error open log file: %s\n",argv[3]); <br>

    exit(-1); <br>

  } <br>

  fprintf(f,"%s--------->%s\n",argv[1],argv[2]); <br>

  fflush(f); <br>

  <br>

  printf("Searching proxy...\n"); <br>

  printf("%s----------->%s\n",argv[1],argv[2]); <br>

  printf("\tport:\n"); <br>

  for( i=0;i<N;i++)  printf("\t%d\n",port[i]); <br>

  <br>

  signal(SIGTERM,terminate);            /* 处理SIGTERM信号 */ <br>

  <br>

  switch(fork()) <br>

  { case 0:                             /* 子进程继续 */ <br>

         break; <br>

    case -1:                            /* 出错       */ <br>

         perror("fork( )"); <br>

         exit(-1); <br>

    default:                            /* 父进程结束 */ <br>

         exit(0); <br>

  } <br>



  <br>

  if(setsid( )<0)                              /* 脱离进程组,脱离控制终端 */ <br>

  { perror("setsid( )"); <br>

    exit(-1); <br>

  } <br>

  <br>

  for(k=startIP;k<=endIP;k++)                 /* 循环扫描指定范围内的所有IP  */ <br>

  { if( (k % 256)==0)  continue; <br>

    if( (k % 256)==255) continue;                 /* 略过两类特殊的IP地址  */ <br>

    serverIP.s_addr=k; <br>

    sprintf(serverName,"%s",ntohl(inet_ntoa(serverIP))); <br>

    findProxy(k); <br>

  } <br>

  fprintf(f,"All done\n"); <br>

  fclose(f); <br>

} <br>

  <br>

  <br>

  <br>

-- <br>

※ 修改:.Happy 于 Aug 14 12:19:34 修改本文.[FROM: 202.38.198.197] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="192.htm">上一层</a>][<a href="270.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -