/*
 * Simple ftpd scanner with check anonymus account.
 *
 * Author: CKM of KALASNIJKOV Team
 * Date: 25/09/1999 <-> 22:50PM
 *
 * Example:
 * bash$  host -l gov.pl| grep "has address" | awk -F ' ' '{print$4}' >> IP.list
 * bash$ ./b0mftp IP.list IP.log
 * bash$ cat IP.log
 * Host: 127.0.0.1
 * 220 ProFTPD 1.2.0pre3 Server (ProFTPD) [ckm.kadath.pl]
 * Anonymous:[Yes]
 * -=-=-=-=-=-=-=-=-=-=-=-=-=-
 * [...]
 *
 * Have phun!
 *
 *
 */





#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/utsname.h>
#include <sys/stat.h>
#include <arpa/inet.h>

#define BUFLEN 1024
#define PORT 21
#define RE "230"

void letZR0ck(char *host, char *logfile) {

	int sock,a,n;
	char buf[BUFLEN];
	struct hostent *hp;
	struct sockaddr_in sin;
	struct in_addr addr;
        FILE *fd;
	

        fd=fopen(logfile,"a");
	if((hp=gethostbyname(host))==NULL) {
		printf("%s: no such host.\n\n",host);
		fprintf(fd,"%s: no such host.\n\n",host);
		return;
	}
	
	bzero((char *)&sin,sizeof(sin));
	bcopy(hp->h_addr,(char *)&sin.sin_addr,hp->h_length);
	sin.sin_family=AF_INET;
	sin.sin_port=htons(PORT);
        sock=socket(AF_INET,SOCK_STREAM,0);
	
	if(sock<0) {
        	printf("socket()\n");
		exit(-1);
	}

	
	printf("Host: %s\n",host);
	fprintf(fd,"Host: %s\n",host);
	if(connect(sock,(struct sockaddr *)&sin,sizeof(sin))<0) {
		printf("Can't connect with remote host.\n\n");
		fprintf(fd,"Can't connect with remote host.\n\n");
		return;
	}

	recv(sock, buf, sizeof(buf),0);
	printf("%s",buf);
	fprintf(fd,"%s",buf);
	for(n=0;n<BUFLEN;n++)
		buf[n] = '\0';
        printf("Logging in.\n");
	send(sock,"user anonymous\n",strlen("user anonymous\n"),0);
	recv(sock, buf, sizeof(buf),0);
	for(n=0;n<BUFLEN;n++)
   		buf[n] = '\0';
	send(sock,"pass root@qnx.com\n",strlen("pass root@qnx.com\n"),0);
	recv(sock, buf, sizeof(buf),0);
	if(strstr(buf,RE)!=0) {
  		printf("Anonymous:[Yes]\n");
		fprintf(fd,"Anonymous:[Yes]\n");
		printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n");
		fprintf(fd,"-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n");
		
	} else {
		printf("Anonymous:[No]\n");
		fprintf(fd,"Anonymous:[No]\n");
		printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n");
	        fprintf(fd,"-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n");
	}
	for(n=0;n<BUFLEN;n++)
   		buf[n] = '\0';
	close(sock);
	fclose(fd);
}


void banner() {
	
	printf("\033[1;32mooooooooooooooooooooooooooooooooooooooooooooooo\033[0m\n");
	
	printf("[::");
	printf("\033[1;34mFTP Daemon Scanner\033[0m");
	printf("::]");
	printf("\033[1;28m by\033[0m");
	printf("\033[1;33m KALASNIJKOV Team\033[0m\n");
	printf("-----------------------------------------------\n");
	printf("\033[1;37mUsage: ./b0mftp [host.list] [log.file]\033[0m\n");
	printf("\033[1;32mooooooooooooooooooooooooooooooooooooooooooooooo\033[0m\n");

	
}

main(int argc,char *argv[]) {
	
	char buff[BUFLEN];
        FILE *fd;
	
	if(argc!=3) {
		banner();
		exit(0);
	}
	
	
        fd=fopen(argv[1],"r");
	if(fd==NULL) {
		printf("%s: file does not exist.\n",argv[1]);
		exit(0);
	}
	
	printf("##################################################################\n");
	printf("#####   FTP Daemon Scanner (c) 1999 by KALASNIJKOV Team      #####\n");
	printf("#####          B0m b0m b0m b0m.. b0m b0m b0m b0m             #####\n");
	printf("##################################################################\n\n");


	while(fscanf(fd,"%s",&buff)!=EOF) {
		letZR0ck(buff,argv[2]);
	}
}
		
	
/* --EOF-- */












	




