Windows x64 y drivers ODBC (Oracle, Sybase, Excel, Access…)

¿No encuentras tu controlador ODBC en Windows x64? Pues eso mismo me ha pasado a mi, y tras intentar utilizar un software que utiliza los drivers ODBC de ORACLE a un Windows 2003 x64 (Supongo que todo lo que aquí explique es válido también para XP x64, visa y w7) he conseguido no desquiciarme y morir en el intento encontrando una bonita solución.

Explico un poquito: cuando accedes al panel de control y pulsas sobre Herramientas Administrativas > Data Sources (ODBC) te encontrarás en tu sistema x64 que solo tienes el driver de “SQL Server” pues bien, esto es porque al acceder desde panel de control ejecutamos la herramienta ODBC x64, situada en “C:\WINDOWS\system32 \Odbcad32.exe” y los únicos drivers puramente x64 ODBC que se han desarrollado han sido estos [Oracle también tiene sus propietarios compilados para x64].

Para ejecutar la herramienta ODBC x32 con todos los drivers ODBC x32 que hay en el sistema y los que trae Windows por default deberemos ejecutar la herramienta: “C:\WINDOWS\SysWOW64\Odbcad32.exe”; Con esto la mayoría de vuestros problemas se verán solucionados.

Pero aún hay más, porque si como yo, lo que pretendes utilizar es la librería de Oracle, aún no termina aquí la lucha; Pues resulta que Oracle envía el PATH de la aplicación que está realizando la conexión parametrizado con paréntesis por lo que si esta aplicación está instalada en el “Program Files (x86)” nunca conseguirás conectar dado que el servidor ve un error de sintaxis; Así pues, la solución al error que probablemente te aparecerá ("ERROR [HY000] [Oracle][ODBC][Ora]ORA-06413: Connection not open.") Es siple y se trata de instalar todo software implicado en la conexión oracle fuera de la carpeta “Program Files (x86)” (y ninguna otra con paréntesis) y magia, todo volverá a funcionar.

Y para terminar, un apunte: Todo lo que configures en x32 y x64 será compatible y accesible desde software x64 pero lo que configures en x64 no será accesible desde x32 para este únicamente serán validas las configuraciones con drivers x32…
Read More!

Programación simple para facebook en PHP (Volumen I)

Antes de entrar en materia quiero decir una frase surgida en la oficina que es bastante descriptiva para decidir si lanzarse a la programación en facebook:

"Si cada vez que uno de mis amigos abre una galletita de la suerte me dieran un centavo sería multimillonario"

Y mi experiencia así lo afirma, facebook es la manera más viral y facil de llegar en el menor tiempo posible a miles de personas, pues todas las aplicaciones que he levantado han hecho bolsa de entre 3000 y 5000 usuarios en tan solo una semana; Lo complicado es mantenerlos, pero, llegar a tanto público tan fácil hasta la invención de FB nunca había sido posible en internet, así pues, hay que aprovechar la oportunidad.

Utilizar la API de facebook no es muy complicado, pero, hasta que te haces con ella y entiendes el sistema sí que puede resultar un poco "liante", así pues os explicaré un poquito la estructura y después ya ya lanzaré un volumen II; Todo esto lo voy a tratar a un nivel medio-avanzado evitando explicar cosas básicas y enfocando todo a un ejemplo simple y ejecutable sin quebraderos de cabeza ni profundizar en perfecciones.

En primer lugar deberemos conseguir la API: http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz y extraerla en el directorio de nuestra web.

Ahora bien, como empezamos a interactuar con facebook desde php? pues bien, en nuestra página (donde apuntará el iframe de aplicación cuando lo configuereis en facebook) incluiremos de las librerías los siguientes ficheros:

include_once 'facebook-platform/php/facebook.php';
include_once 'facebook-platform/footprints/lib.php';
include_once 'facebook-platform/footprints/config.php';

Ahora, editaremos el 'facebook-platform/footprints/config.php'; y en las variables: $api_key y $secret, introduciremos los datos de api_key y secret_key que facebook nos proporcionará al crear la aplicación en el sistema ( http://www.facebook.com/home.php#/developers/createapp.php ).

Tras los includes bien configurados, volveremos a la página de la aplicación e iniciaremos sesión en facebook-api:

$facebook = new Facebook($api_key, $secret);
$facebook->require_frame();
$uid = $facebook->require_login();

(Atención a la variable UID que retornará la UID (clave identificativa de usuario) de la persona que abre la aplicación y seguiremos utilizandola en este ejemplo) y tras este simple código ya podremos ejecutar comandos de facebook como por ejemplo publicar en el muro del usuario mediante:

$facebook->api_client->call_method("facebook.stream.publish", array( 'uid'=> $uid, 'target_id' => $uid, 'attachment' => $attachment,'message' => Hello world!'));

Como veis, posteamos desde la ID $uid (Nosotros [o el usuario que ha abierto la aplicación]) y al target $uid (Nuestro muro).

Con este código, no podremos lanzar elementos XFBML (las ventanitas pre-fabricadas de facebook) pero podremos utilizar todas las funciones que nos permite [cambiando facebook.stream.publish " por la función que queramos ejecutar y el array de parámetros por lo que sea conveniente] y fabricar nuestros propios elementos (podéis hacer pruebas de funciones en la URL http://developers.facebook.com/tools.php que nos permite simular un cliente PHP).

Si veo interesados ya enseñaré como lanzar ventanas de envío de invitaciones, botones o imágenes de facebook e incluso las ventanas de pedir permiso que facebook pone al uso de los desarrolladores.
Read More!

Prueba de concepto: Generador "BruteForce"

Volviendo a los temas interesantes hoy tocaré los Brute Force y aprovecho para decir a todos los lectores que bajaré la frecuencia diaria que mantuve la primera semana a dos o tres actualizaciones semanales.

Entrando en el tema: Un Brute Force consiste en extraer "algo", sea una password u otra cosa mediante el uso indiscriminado de cientos, miles, o más bien, billones de combinaciones de letras generando así "palabras" con cierta, ínfima, posibilidad de encontrar lo que buscamos.
Pero... y si no tenemos prisa y nada nos limita las oportunidades de reintento, ¿llegaremos realmente a conseguirlo? ¿Es una opción el BF? ¿Realmente, podemos llegar a obtener "algo" a base de BF?
Al contrario de lo que muchos piensan; Con un motor optimizado y preparado para cada caso en concreto, siempre que se cuente con las maquinas suficientes como para dividir el trabajo o el tiempo sea algo irrelevante: Sí, es posible.
A modo de prueba de concepto y en ningún caso con intención de dañar ni de buscar tarifas gratuitas o cualquier otra actividad ilícita mostraré un ejemplo de un motor Brute Force que, pacientemente, hace peticiones al motor java que devuelve por AJAX las tarifas en la página web de la Renfe; Podéis entrar y ver el formato que utilizan, se trata de una petición javascript que, según la Key solicitada (p.ej: GL011 niños, GL016 adultos..) devuelve el precio al que saldrá. Captura con firebug:



En este "motor para estudio" programado, podéis hacer peticiones para los Euromed Valencia-Barcelona con fechas cambiantes para que no "caduque" el programa; La cosa es simple, como funciona por HTTPS el sistema viene integrado con un navegador el cual, tenemos que accionar a mano siguiendo el orden de los botones y pulsando donde corresponda, por ejemplo, primero, obtenemos la cookie (en cada paso hay que esperar a que la página termine de cargar al 100% en el navegador visual integrado, pues este no es una maravilla y puede provocar errores que requieran del reinicio de la aplicación añado: tarda y puede dar la sensación de estar "colgado"), después, realizamos la búsqueda de trenes, aquí, Renfe, nos solicita un "captcha", que muy amablemente el programa nos ofrecerá para escribir, más tarde solicitamos la página de compra y por último el "precio adultos" que lanzará contra el servidor una petición con la Key GL016; Aquí, podremos iniciar el Brute Force System, un generador integrado en el programa que realicé íntegramente en Delphi hace bastante tiempo y que da mucho juego por qué no carga a la maquina siendo bastante rápido; Por ejemplo, si en "Palabra inicial" insertamos (en mayúsculas) "GL010", e iniciamos el sistema pulsando el botón iniciar, este, empezará a lanzar peticiones siguiendo un orden alfabético, pocos segundos más tarde, ya habremos encontrado dos "Keys" la de niños, GL011, y la de adultos, GL016.

El programa, va creando un "log" con que Key's han retornado una respuesta válida, así como almacena la respuesta para su visualización posterior; Es cierto quela velocidad es mínima (aproximadamente unas 90 palabra por minuto), pero, teniendo en cuenta que podemos retomar el brute force en apenas unos segundos desde el punto donde se cortara (también guarda log de ultimas key's testeadas), y que podemos dividir la carga en segmentos de caracteres así como punto de inicio entre diferentes maquinas, y, contando que el estándar de la aplicación son exactamente 5 caracteres, la cosa, se reduce considerablemente; así que es más que una opción válida, y, por ejemplo, en este caso, si existiera una "Key" de "debug" cuya respuesta fueran siempre gratuitos, "0 €" a todos los billetes, ya tendríamos algo que de ningún otro método podríamos obtener.

Por favor, como ya digo mi intención es puramente educativa, no me gustaría que empezaran miles de peticiones contra la web de tarifas de Renfe, no obstante, adjuntaré la aplicación par que podáis ver en funcionamiento la "máquina" para aplicarlo en usos que hagan avanzar la ciencia.

Descarga la aplicación aquí
Pulsa aquí para descarga el código fuente (Para evitar abusos pídemelo personalmente en los comentarios y te lo enviaré).

Capturas de pantalla:







Suerte a tod@s.
Read More!

Una de programación BAT: Pasando parametros

Quiero hacer un sencillo y simple apunte sobre la programación batch:

¿Como pasar parametros a un código batch?
El asunto es simple; Los parámetros, se quedan almacenados en las variables %0 (este, siempre será el nombre del fichero .bat que estamos ejecutando), %1, %2 y así consecutivamente por tanto es bien fácil leerlos; Un ejemplo de utilización sencillo sería un .bat que al pasar un parámetro lanzase ping sobre la IP a la que apuntamos, la cosa sería así:

El fichero test.bat sería así:

ping.exe %1 <- Lanzamos ping contra el parametro 1.
@echo off <- Evitamos que se vea el comando que vamos a lanzar.
pause <- Pausamos la ventana para que no se cierre y se pueda leer.

Y lo lanzaríamos con "test.bat 127.0.0.1".
Fácil y bonito pero si no lo sabemos no podemos utilizarlo siendo un recurso con muchas posivildades para hacer output de información como por ejemplo un ping.
Claro que este ejemplo es solo una introducción al mundo del batch pues en realidad se pueden hacer maravillas con ellos.... Otro día mas y mejor sobre el mundo .bat. Read More!

lagTelCOM: El cliente TCP más versátil del universo conocido

Otro software propio realizado durante una tarea que mejor no explicaré y que con el tiempo mejoré porque es increíblemente útil, o al menos a mi me lo ha resultado.
Se trata de un cliente TCP (con 4 perfiles de configuración) al que podemos asignar mediante un fichero de configuración con el formato: "Nombre para visualización###Contenido del paquete" tantas líneas como queramos para después, una vez conectados, pulsar y enviarlas.
¿Que utilidad tiene? Cuando desarrollas un nuevo cliente para algo sobre lo que no hay especificaciones de protocolo, con este programa y un buen sniffer puedes ir probando sin desperdiciar tu tiempo; Así como es útil también para realizar conexiones de todo tipo puesto que puedes "grabar" paquetes para realizar cualquier tarea... Y con simples click's los irás enviando; así como los puedes bajar a el "editor tipo chat" y cambiar rápidamente el contenido de la línea (pensado para servidores que hacen "request" de códigos cambiantes como IRC con el PING).

Captura de pantalla:



Pulsa aquí para descargar el programa.
Pulsa aquí para descarga el código fuente (Para evitar abusos pídemelo personalmente en los comentarios y te lo enviaré).

Espero que os sea de utilidad.
Ah, en el Zip, además del ejecutable compilado, viene incluida como ejemplo la configuración para hacer GET's HTTP, Búsquedas en google, y como enviar caracteres en formato decimal. Read More!