//ftp-scan.c #include #include #include #include #include #include #include int sock; char line[1024]; void rconnect(char *server) { struct sockaddr_in sin; struct hostent *hp; hp=gethostbyname(server); if(hp==NULL) { printf("Unknown host: $s\n",server); exit(0); } bzero((char*) &sin,sizeof(sin)); bcopy(hp->h_addr,(char *) &sin.sin_addr,hp->h_length); sin.sin_family=hp->hp_addrtype; sin.sin_port=htons(21); sock=socket(AF_INET,SOCK_STREAM,0); connect(sock,(struct sockaddr *) &sin,sizeof(sin)); } void login(void) { char buf[1024]; sprintf(buf,"USER ftp\n"); send(sock,buf,strlen(buf),0); sleep(1); sprintf(buf,"PASS user@\n"); send(sock,buf,strlen(buf),0); } void readln(void) { int i,done=0,w; char tmp[1]; sprintf(line,""); i=0; while(!done) { w=read(sock,tmp,1,0); if(tmp[0]!=0) { line[i]=tmp[0]; } if(line[i]=='\n') { done=1; } i++; } line[i]=0; } void sendln(char s[1024]) { send(sock,s,strlen(s),0); } #define UC(b) (((int)b)&0xff) void main(int argc,char **argv) { char buf[1024]; int i; u_short sport,eport; register char *p,*a; struct hostent *hp; struct sockaddr_in sin; char adr[1024]; if(argc!=5) { printf("usage: ftp-scan ftp_server scan_host loport hiport\n"); exit(-1); } hp=gethostbyname(argv[2]); if(hp==NULL) { printf("Unknown host: %s\n",argv[2]); exit(0); } bzero((char*) &sin,sizeof(sin)); bcopy(hp->h_addr,(char *) &sin.sin_addr,hp->h_length); rconnect(argv[1]); /* Login anon to server */ login(); /* Make sure we are in */ for(i=0;i<200;i++) { readln(); if(strstr(line,"230 Guest")) { printf("%s",line); i=200; } } } a=(char *)&sin.sin_addr; sport=atoi(argv[3]); eport=atoi(argv[4]); sprintf(adr,"%i,%i,%i,%i",UC(a[0]),UC(a[1]),UC(a[2]),UC(a[3])); for(i=sport;i