Código
--Aquí va el código que llevo:
lftp ftp://localhost/ -u usuario,
Código
/* *Nombre: COMB. *Autor: NeoB *Descrpición: Genera una lista de palabras (con o sin sentido) combinando las letras del abecedario, en mayusculas, minúsculas, y números; además permite usar esas combinaciones con un comando. Para modificar esta lista se puede modificar la variable "abc" (global). */ /***LAS LIBRERÍAS***/ #include <stdio.h> #include <string.h> /***VARIABLES GLOBALES****/ char *abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; //El abecedario (los caracteres que hay son los que se usarán). int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20; //Contadores que usaremos para apuntar a las diferentes posiciones de "abc". char command[500]; int yescommand; int tamcommand; /*******************EL MAIN() Y LAS FUNCIONES DE CONTROL.*********************/ int main() { char option1, option2; int optiontam; //Para almacenar las opciones que escojamos. " ======================================\n" " || COMB - Generador de diccionarios.||\n" " || By Juan Escudero Pedrosa. ||\n" " ======================================\n" "Set the length of the strings used:\n" "1) use a progressive increase of the string's lenght.\n" "2) fixed lenght.\n" "3) use range of values for string's lenght.\n" "What option has you selected? (1-3): " "\E[00m"); "Do you want to use a command with the strings generated? (y/n) " "\E[00m"); if(option2=='y') { "What command do you want to use? (Remember that the word generated will join to the end of the command): " "\E[00m"); yescommand = 1; //Si yescommand es 1 siginifica que hemos elegido meter comandos. /*********************************COJEMOS LA CADENA QUE METE***********************************************************/ char *buscar_n; //La utilizamos para buscar un fin de línea por que queremos cojer solo una línea. if (buscar_n) //Si lo hay... (no necesita corchetes ('{' y '}') por que solo hacemos una cosa. *buscar_n = '\0'; //Lo sustituimos por un final de cadena (\0). /**********************************************************************************************************************/ } switch(option1) //Para los valores de lo primero que se nos da a elegir... { case '1': //Si elegimos progresiva, vamos llamando. Podemos por ejemplo, cambiar el orden y ponerlo en dos ordenadores. cero(); one(); two(); three(); four(); five(); break; case '2': //Si elegimos un tamaño predeterminado... "What lenght do you want to use? (0-20): " "\E[00m"); switch(optiontam) { case 0: cero(); break; //Lamamos a cero() (para 0 caracetres): case 1: one(); break; //Llamamos a one() (para 1 caracter) case 2: two(); break; //Llamamos a two() (para 2 caracteres) case 3: three(); break; case 4: four(); break; case 5: five(); break; case 6: break; //Todavia no lo he puesto... case 7: break; //Todavia no lo he puesto... case 8: break; //Todavia no lo he puesto... case 9: break; //Todavia no lo he puesto... case 10: break; //Todavia no lo he puesto... case 11: break; //Todavia no lo he puesto... case 12: break; //Todavia no lo he puesto... case 13: break; //Todavia no lo he puesto... case 14: break; //Todavia no lo he puesto... case 15: break; //Todavia no lo he puesto... case 16: break; //Todavia no lo he puesto... case 17: break; //Todavia no lo he puesto... case 18: break; //Todavia no lo he puesto... case 19: break; //Todavia no lo he puesto... case 20: break; //Todavia no lo he puesto... default: break; //Todavia no lo he puesto... } break; case '3': //Si hemos elegido utilizar un rango de valores... setvalues(); break; default: "Unknow option.\n" "\E[00m"); return -1; break; } return 0; } int setvalues() { /***EN CONSTRUCCIÓN****/ return 0; } /* ***************HA ESTAS FUNCIONES LAS LLAMAMOS PARA GENERAR LAS PALABRAS******************** ***Explico como lo genera en "three()" y en "four()" (para longitudes 3 y 4 respectivamente). */ int cero() { char *toexecute; char nada = '\0'; //Por si tenemos la p**a suerte de que la password, o para lo que lo utilizemos está en blanco. if(yescommand==1) { toexecute = command; toexecute[tamcommand] = nada; } return 0; } int one() { char *toexecute; for (i1=0; i1<=61; i1++) { char caracter1 = abc[i1]; if(yescommand==1) { toexecute = command; toexecute[tamcommand] = caracter1; } } return 0; } int two() { char *toexecute; for (i1=0; i1<=61; i1++) { char caracter1 = abc[i1]; for(i2=0; i2<=61; i2++) { char caracter2 = abc[i2]; if(yescommand==1) { toexecute = command; toexecute[tamcommand] = caracter1; toexecute[tamcommand + 1] = caracter2; } } } return 0; } int three() //Para generar combinaciones de 3 caracteres de longitud. { char *toexecute; //Donde guardamos el comando introducido + las combinaciones generadas. for (i1=0; i1<=61; i1++) //Este sería el que más lento cambia de los 3 caracteres. { char caracter1 = abc[i1]; //"caracter1" apunta primero a "a", luego a "b", luego a "c", etc (ver la variable abc). for(i2=0; i2<=61; i2++) { char caracter2 = abc[i2]; for(i3=0; i3<=61; i3++) //Este ni lo veríamos pasar de lo rápido que es, pero solo si elegimos no comandos (esto es lo que quiero solucionar). { char caracter3 = abc[i3]; if(yescommand==1) //Si hemos elegido utilizar un comando... { toexecute = command; //Ponemos toexecute igual que command, ya que command tiene el comando, pero le tenemos que agregar las palabras generadas. toexecute[tamcommand] = caracter1; //Le vamos agregando las combinaciones (el primer caracter)... toexecute[tamcommand + 1] = caracter2; //Le vamos agregando las combinaciones (el segundo caracter)... toexecute[tamcommand + 2] = caracter3; //Le vamos agregando las combinaciones (el tercer caracter)... } } } } return 0; //Decimos al main() que todo ha ido bien. } int four() { char *toexecute; for (i1=0; i1<=61; i1++) { char caracter1 = abc[i1]; for(i2=0; i2<=61; i2++) { char caracter2 = abc[i2]; for(i3=0; i3<=61; i3++) { char caracter3 = abc[i3]; for(i4=0; i4<=61; i4++) { char caracter4 = abc[i4]; if(yescommand==1) //Si hemos elegido utilizar un comando... { toexecute = command; //Ponemos toexecute igual que command. toexecute[tamcommand] = caracter1; //Le vamos agregando las combinaciones (el primer caracter)... toexecute[tamcommand + 1] = caracter2; //Le vamos agregando las combinaciones (el segundo caracter)... toexecute[tamcommand + 2] = caracter3; //Le vamos agregando las combinaciones (el tercer caracter)... toexecute[tamcommand + 3] = caracter4; //Le vamos agregando las combinaciones (el cuarto caracter)... } } } } } return 0; } int five() { char *toexecute; for (i1=0; i1<=61; i1++) { char caracter1 = abc[i1]; for(i2=0; i2<=61; i2++) { char caracter2 = abc[i2]; for(i3=0; i3<=61; i3++) { char caracter3 = abc[i3]; for(i4=0; i4<=61; i4++) { char caracter4 = abc[i4]; for(i5=0; i5<=61; i5++) { char caracter5 = abc[i5]; if(yescommand==1) { toexecute = command; toexecute[tamcommand] = caracter1; toexecute[tamcommand + 1] = caracter2; toexecute[tamcommand + 2] = caracter3; toexecute[tamcommand + 3] = caracter4; toexecute[tamcommand + 4] = caracter5; } } } } } } return 0; }
No tengo mucho tiempo para mejorarlo por eso de estudiar, y cuando tengo, no veo que cambiar (detalles importantes, y lo único que he hecho es conseguir logearme en localhost con esta "aaaad" en la opción fijo con 5 caracteres).
He de decir que va muy rápido cuando lo hago sin introducir comandos, pero va al ritmo de 1 por segundo cuando es con comando (porejemplo cuando pongo: "lftp http://ftp://localhost/ -u user,". Gracias por adelantado.
(El http:ftp://localhost/ ese sale solo)