PDA

Ver la Versión Completa : Descubrir Servers MySQL en la red


bustio
11-05-2005, 19:49:20
Hola:

Estoy tratando de hacer una aplicacion en delphi 7, uso Zeos Component y como server de BD utilizo MySQL. Mi aplicacion requiere conectarse al servidor, y para ello necesito mostrar una lista con todos los servidores MySQL que se encuentren en la red, o al manos en el dominio. El problema esta qen que lo que se requiere es que se chequee la red en busca de estos servidores y luego poblar la lista para mostrarla(algo asi como hace el SQL Server 2000 cuando se trata de conectar a una BD ya existente, que el muestra todos los servidores que se encuentran funcionando). Lo que yo supongo que debo hacer, es enviar un paquete con una estructura determinada a la red, por un puerto determinado que sera la informacion que esta esperando el servidor MySQL para responder diciendo que ahi esta el e incluirlo en mi lista. Supongo tambien que el puerto sea el 3306, pero no estoy seguro de ello, ni de como es el paquete que tendria que enviar para lograr esto.
Sialguien tiene idea de como logar esto, o si ha hecho algo asi, por favor, agradezco cualquier idea o sugerencia.

Muchas gracias!!!

Lazaro Bustio Martinez.

kayetano
13-05-2005, 17:46:13
Hola

Una forma facil que se me ocurre es
1. Buscar todos los equipos de la red obteniendo su IP (no tengo ni idea de como se hace esto)
2. Intentar conectar con el gestor de bases de datos MySQL, yo para hacer esto intento conectar con la base de datos "test", siempre y cuando conozcas el usuario.

El puerto por lo general es el 3306 pero se puede cambiar.

Otra idea que se me ocurre es intentar hacer un telnet al puerto 3306 de cada una de las máquinas de tu red, creo que responde algo.

bustio
13-05-2005, 22:40:15
Gracias Kayetano por tu sugerencia. Ya tengo la solucion a como descubrir los servers que existen en la red. La cosa es precisamente enviar un paquete al puerto 3306 de la pc donde supuestamente esta el Server MySQL y ver lo que esta devuelve.

Probe con el TELNET de Windows y descubri que cuando hago esto:

START -> CMD -> TELNET <Enter>
Telnet: OPEN 172.16.21.28 3306

el telnet se conecta a esa pc por ese puerto y le devuelve la Version de MySQL que hay instalado!!!!(si es que hay alguno) con una cadena de caracteres detras, los que supongo tambien tengan su significado y luego se queda a la espera de una nueva cadena, la que si no es enviada, o no es la esperada el servidor cierra la conexion.

Visto esto, entonces la cosa seria asi:

Insertar en la forma un componente idTelnet, de la paleta INDY. Darle a su propiedad HOST el ip o el nombre del suspuesto Server MySQL; como PORT se le da el 3306 y luego se dice id TELNET.Connect;.
Despues se lee con alguna funcion lo que devuelve el server, que sera la version de su MySQL o un mensaje diciendo que no se pudo conectar al server.

Esto que les cuento es muy empirico; pues no he tenido tiempo de pulir mi idea aun con el afan de darle solucion al problema lo mas rapido posible.

Ahora bien; si mediante alguna funcion podemos descubrir todos los ips de la red a la que estamos conectados y almacenarlos en un StringList, que luego sus valores seran utilizados para pasarselos como valores a la propiedad HOST del idTELNET, y aquellos ips que envien una respuesta son almacenados en otro StringList pues podremos de esta manera obtener la lista de los servers MySQL que habitan en la red a la que pertenecemos.

REPITO: esta idea es todavia una vision inicial del problema. A cualquier interesado en saber como termino todo, por favor, escribirme a lbustio@yahoo.es; y en cuanto tenga la solucion ya terminada pues la publicare en este mismo foro para el uso de toda la comunidad.

Y aprovechando este comentario.. alguien sabe como obtener todos los IPs de la red a la que estamos conectados?!??!?

GRACIAS!!

Lazaro BUstio Martinez.