📄 program-proxyscan-for-solaris.html
字号:
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Author" content="Edward Fu">
<meta name="GENERATOR" content="Mozilla/4.05 [zh-CN] (X11; I; Linux 2.1.127 i686) [Netscape]">
<title>FreeProxy Scan for Solaris by Happy</title>
</head>
<body>
发信人: Calvin (灵飞), 信区: Linux
<br>标 题: FreeProxy Scan for Solaris by Happy
<br>发信站: BBS 水木清华站 (Wed Jul 15 08:23:22 1998)
<p>/* 应各位的要求, 贴上Happy的原作.
--calvin@scut*/
<br>/* free proxy搜索程序,for UNIX
*/
<br>/* 用法: 程序名 起始IP地址 结束IP地址 日志文件
*/
<br>/* 本程序将把搜索结果存于日志文件中
*/
<br>/* Author: Happy(Netguy)
*/
<p>#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"
<p>#define N 11
<p>int
port[N]={80,81,88,8083,8080,8001,8888,3128,3124,3000,1080};
<br>
/* 欲搜的端口号 */
<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;
<p>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>}
<p>void findProxy(u_long addr)
<br>{
<br> int i;
<br> struct sockaddr_in host;
<p>/* 若连上了主机,则看其所有有可能提供proxy服务的端口 */
<p> 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]);
<p> if ( (sockfd=socket(AF_INET,SOCK_STREAM,0))<0
)
<br> { fprintf(f," Error open
socket\n");
<br> exit(-1);
<br> }
<br>
<p> /* 试连一个可能提供proxy服务的一个端口
*/
<br> /* O_NDELAY = FNDELAY =
O_NONBLOCK */
<p> 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>
{ err=1;
<br>
errlen=1;
<br>
getsockopt(sockfd,SOL_SOCKET,SO_ERROR,(char
<br>*)&err,&errlen);
<br>
if(err==0)
<br>
fprintf(f,"%s\t%d\n",serverName,port[i]);
<br>
}
<br> }
<br> close(sockfd);
<br> fflush(f);
<br> }
<br>}
<p>main(int argc,char *argv[])
<br>{
<p> int i;
<p> if(argc!=4)
<br> { printf("Usage: %s startIP endIP logFile\n",argv[0]);
<br> exit(-1);
<br> }
<p> startIP=ntohl(inet_addr(argv[1]));
/* 搜索的IP范围 */
<br> endIP=ntohl(inet_addr(argv[2]));
<br> if(startIP>endIP)
<br> { k=startIP;
<br> startIP=endIP;
<br> endIP=k;
<br> }
<p> f=fopen(argv[3],"a");
/* 打开日志文件 */
<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);
<p> 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]);
<p> signal(SIGTERM,terminate);
/* 异常中止处理 */
<br> switch(fork())
<br> { case 0:
/* 子进程继续 */
<br> break;
<br> case -1:
/* 出错 */
<br> printf("fork() error\n");
<br> exit(-1);
<br> default:
/* 父进程结束 */
<br> fclose(f);
<br> exit(0);
<br> }
<p> setpgrp();
<p> i=open("/dev/tty",O_RDWR);
/* 切断与控制台的联系 */
<br> if(i>=0)
<br> { ioctl(i,TIOCNOTTY,0);
<br> close(i);
<br> }
<br> else { fprintf(f,"TTY eacape error\n"); fflush(f); }
<p> for(k=startIP;k<=endIP;k++)
<br> { if( (k % 256)==0) continue;
/* localhost */
<br> if( (k % 256)==255) continue;
/* broadcast */
<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> sprintf(serverName,"%d.%d.%d.%d",p1,p2,p3,p4);
<br> findProxy(k);
<br> }
<br> fprintf(f,"All done\n");
<br> fclose(f);
<br>}
<p>--
<br>※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.198.197]
<br>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -