Generador de palabras. Wordgenerator.c

Posted on May 23rd, 2008 in FreeBSD, Linux, Programacion, Seguridad, tutoriales by Miggs

beastyHace tiempo, trasteando con las redes wifi y la clásica encriptacion WEP llegue a un punto en el que necesitaba una diccionario de claves. Como las claves eran ’semi-aleatorias’ no me servia cualquier diccionario, necesitaba algo que me generase todas las posibles claves de determinada longitud con un determinado juego de caracteres. Así que decidí poner en buen uso mis conocimientos de C y crearme una herramienta que me lo hiciera. El problema era conceptual mente simple así que me puse manos a la obra.

Inicialmente resolví el problema con recursividad (lento), mejorandolo mas tarde utilizando un algoritmo lineal (mucho mucho mas rápido). Aquí os dejo el código fuente.

Compilar

Si dispones de gcc el proceso es muy sencillo.

$ gcc -o wordgenerator.c wordgenerator

Ejecucion

Desde la linea de comandos basta con

$ ./wordgenerator

Código

//Librerias necesarias
#include<stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
//Prototipos
int getOptions(int,char**,char**,int*,int*);
void ayuda();
void generator(char *, char *,int, int);
//
//Funcion: wordgenerator.c
//Description: Genera palabras linear o recursivamente.
//Autor: Miggs
//Date: 18/10/2006
//
int main (int argc, char *argv[])
{
//Caracteres a usar por defecto
char *c = “1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM”;
int len;
//Usamos recursividad?
int r = 0; //No a no ser que nos lo pidan…

if(getOptions(argc,argv,&c,&len,&r)<0)
ayuda();

char actual[len + 1];
actual[len] = ‘\0′;

if(r == 0){
//Lineal = rapido
int i,j;
for(i = 0; i < len ; i ++)
for(j = 0; j< strlen(c) ; j ++){
actual[i] = c[j];
printf(”%s\n”,actual);
}
}else
//Recursividad = lento
generator(c,actual,len,0);
return 0;
}
//
//Funcion: generator
//Description: funcion recursiva
//Date: 18/10/2006
//
void generator(char *c,char *actual, int len, int level)
{
int i;
if(level < len)
{
for(i = 0; i < strlen(c);i = i + 1){
actual[level] = c[i];
generator(c,actual,len,level+1);
}
}
else
printf(”%s\n”,actual);
}

//
//Funcion: getOptions
//Description: Interpreta las opciones de la linea de comandos
//Date: 18/10/2006
//
int getOptions(int argc, char **argv, char **vC, int *l, int *r)
{
int c;
int retValue = -1;

while((c = getopt(argc, argv, “l:c:r”)) != -1){
switch(c){
case ‘l’:
*l = atoi(optarg);
if(*l > 0)
retValue = 1;
break;
case ‘c’:
*vC =optarg;
break;
case ‘r’:
*r = 1;
default:
break;
}
}
return retValue;
}

//
//Funcion: ayuda
//Description: Imprime la ayuda por pantalla
//Date: 18/10/2006
//
void ayuda()
{
printf(”\n// wordGenerator 0.1 6/Feb/2008\n”);
printf(”// icaix.com//\n”);
printf(”\n Uso:\n”)//
printf(” ./wordGenerator [-C CaracteresAUsar] [-r] -l <longitudPalabra> \n”);
printf(”\n Generacion palabras de longitud 3, metodo lineal\n”);
printf(” ./wordGenerator -l 3\n”);
printf(”\n Generacion palabras de longitud 3, metodo recursivo\n”);
printf(” ./wordGenerator -r -l 3\n”);
printf(” Generacion palabras de longitud 3 con vocabulario abcdefghABCDEFGH\n”);
printf(” ./wordGenerator -l 3 -C abcdefghABCDEFGH\n\n”);
_exit(0);
}


Configuracion del sonido FreeBSD en nc6400

Posted on May 22nd, 2008 in FreeBSD, tutoriales by Miggs

beastyAl instalar FreeBSD 7.0 para tener sonido en el portátil, es necesario ordenarle explicitamente al sistema que cargue el modulo de sonido corespondiente. Esto afortunadamente es una tarea relativamente simple que se arregla insertando una linea en /boot/loader.conf.

Tarjeta de sonido

Para ver los dispositivos PCI del pc utilizamos el comando ‘pciconf’:

# pciconf -l -cv

[..]
vendor = ‘Intel Corporation’
device = ‘82801G (ICH7 Family) High Definition Audio’
class = multimedia
cap 01[50] = powerspec 2 supports D0 D3 current D0
cap 05[60] = MSI supports 1 message, 64 bit
cap 10[70] = PCI-Express 1 type 0
[..]

Modulo de sonido: snd_hda.ko

Es necesario cargar el modulo snd_hda para que el audio funcione correctamente.

# kldload snd_hda

Para cargar el modulo automáticamente durante el arranque del sistema, añade la siguiente linea en /boot/loader.conf

snd_hda_load=”YES”


Resolucion nativa 1280×800 en FreeBSD 7.0, Compaq nc6400

Posted on May 22nd, 2008 in FreeBSD, tutoriales by Miggs

beastyTal y como suele ocurrir al instalar Debian, una de las primeras batallas a las que se enfrenta uno es configurar la configuración de X11. FreeBSD no es diferente, especialmente en resoluciones diferentes a 1024×768. En mi caso, dispongo de un compaq nc6400 equipada con un Core 2 Duo T5500, 3 GB de RAM, disco SATA de 250 GB y afortunadamente el chipset GM945 de intel. La pantalla es de 14.1” con una resolución nativa de 1280×800. El proceso no es complicado en si pero si que puede llevar algo de tiempo a los recién iniciados como me ocurrió a mi.

Por cierto, aquí os dejo un ‘must have’ a todos los que migréis de Linux a FreeBSD y viceversa Unix/Linux/BSD Cheat Sheet.

Especificaciones H.W. de mi equipo relevantes al manual.

  • Chipset GM945, AGP.
  • Resolución nativa de la pantalla: 1280×800.

Necesidades:

  • modulo i915
  • Paquete i915resolution.

Paso 1: Asegurarnos que el i915 esta cargado.

En FreeBSD para ver los modulos cargados en cada momento se utiliza el comando ‘klbstat’

# kldstat

En caso de que no este en la lista el modulo ‘i915.ko’ tendras que cargarlo.

# kldload i915

Para cargar el modulo automáticamente durante el arranque añade la siguiente linea en /boot/loader.conf

i915_load=”YES”

Paso 2: Instalacion paquete i915resolution.

Es necesario tener instalado este paquete para permitir algunas resoluciones especificas, como por ejemplo 1280×800 en nuestro caso. Hay muchas formas de instalar paquetes, una de ellas es.

# pkg_add -r i915resolution

Una vez instalado agrega las siguientes lineas a /etc/rc.conf

i915resolution_enable=”YES”
i915resolution_modes=”3c”
i915resolution_width=1280
i915resolution_height=800

Configuracion: /etc/X11/xorg.conf

Este es mi xorg.conf.

Section “Files”
FontPath “/usr/share/fonts/X11/misc”
FontPath “/usr/share/fonts/X11/cyrillic”
FontPath “/usr/share/fonts/X11/100dpi/:unscaled”
FontPath “/usr/share/fonts/X11/75dpi/:unscaled”
FontPath “/usr/share/fonts/X11/Type1″
FontPath “/usr/share/fonts/X11/100dpi”
FontPath “/usr/share/fonts/X11/75dpi”
EndSection

Section “Module”
Load “i2c”
Load “bitmap”
Load “ddc”
Load “dri”
Load “extmod”
Load “freetype”
Load “glx”
Load “int10″
Load “vbe”
EndSection

Section “InputDevice”
Identifier “Generic Keyboard”
Driver “kbd”
Option “CoreKeyboard”
Option “XkbRules” “xorg”
Option “XkbModel” “pc105″
Option “XkbLayout” “de”
EndSection

Section “Device”
Identifier “Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller”
Driver “i810″
BusID “PCI:0:2:0″
Option “AGPMode” “4″
Option “AGPFastWrite” “yes”
Option “ColorTiling” “on”
Option “EnablePageFlip” “yes”
Option “DynamicClocks” “true”
Option “BIOSHotkeys” “true”
EndSection

Section “Monitor”
Identifier “Generic Monitor”
ModelName “1280X800@60HZ”
Option “DPMS”
VendorName “Hp”
Modeline “1280×800″ 80.58 1280 1344 1480 1680 800 801 804 827
EndSection

Section “Screen”
Identifier “Default Screen”
Device “Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller”
Monitor “Generic Monitor”
DefaultDepth 24
SubSection “Display”
Depth 24
Modes “1280×800″
EndSubSection
EndSection

Section “ServerLayout”
Identifier “Default Layout”
Screen “Default Screen”
EndSection

Section “DRI”
Mode 0666
EndSection

Section “Extensions”
Option “Composite” “Enable”
EndSection