📄 00000015.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: Calvin (灵飞), 信区: Linux <BR>标 题: FreeProxy Scan for Solaris by Happy <BR>发信站: BBS 水木清华站 (Wed Jul 15 08:23:22 1998) <BR> <BR>/* 应各位的要求, 贴上Happy的原作. --calvin@scut*/ <BR>/* free proxy搜索程序,for UNIX */ <BR>/* 用法: 程序名 起始IP地址 结束IP地址 日志文件 */ <BR>/* 本程序将把搜索结果存于日志文件中 */ <BR>/* Author: 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>/* 如果编译通不过,可以把下面一行改为 #include <sys/ioctl.h> */ <BR>#include "/usr/ucbinclude/sys/ioctl.h" <BR> <BR>#define N 11 <BR> <BR>int port[N]={ <BR>80,81,88,8083,8080,8001,8888,3128,3124,3000,1080}; /* 欲搜的端口号 */ <BR>int status=-1; <BR>char serverName[20]; <BR>u_char p1,p2,p3,p4; <BR>int sockfd=-1; <BR>struct timeval timeout={2,0}; <BR>struct fd_set mask; <BR>FILE *f=NULL; <BR>int err; <BR>int errlen; <BR>u_long startIP,endIP,k; <BR> <BR>void terminate(void) /* 异常中止处理子程序 */ <BR>{ <BR> p1=(u_char)( (k>>24) & 0xFF); <BR> p2=(u_char)( (k>>16) & 0xFF); <BR> p3=(u_char)( (k>>8 ) & 0xFF); <BR> p4=(u_char)( k & 0xFF); <BR> fprintf(f,"%d.%d.%d.%d killed.\n",p1,p2,p3,p4); <BR> fclose(f); <BR> if(sockfd>0) close(sockfd); <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," Error open socket\n"); <BR> exit(-1); <BR> } <BR> <BR> <BR> /* 试连一个可能提供proxy服务的一个端口 */ <BR> /* O_NDELAY = FNDELAY = O_NONBLOCK */ <BR> <BR> if(fcntl(sockfd,F_SETFL,O_NDELAY) < 0 ) /* 非阻塞式socket */ <BR> { fprintf(f,"fcntl() error\n"); <BR> exit(-1); <BR> } <BR> status=connect(sockfd,(struct sockaddr *)& host,sizeof(host)); <BR> timeout.tv_sec=1; <BR> timeout.tv_usec=0; /* 超时限制 */ <BR> FD_ZERO( & mask); <BR> FD_SET(sockfd,& mask); <BR> status=select(sockfd+1,(struct fd_set *)0,& mask, (struct fd_set <BR>*)0,& timeout); <BR> switch(status) <BR> { case -1: <BR> fprintf(f,"select error\n"); <BR> fclose(f); <BR> close(sockfd); <BR> exit(-1); <BR> case 0: /* 连接超时 */ <BR> close(sockfd); <BR> return; <BR> default: /* 连上了 */ <BR> if( FD_ISSET(sockfd,& mask) ) <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -