FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Saber si un puerto esta abierto
Hola,
antes de nada, no se si este es el foro adecuado, pero no veia claro donde ponerlo. Trabajo en Delphi 6. Bueno, mi problema es el siguiente, estoy desarrollando una aplicación y necesito saber si los equipos instalados dentro de la oficina tienen abiertos diversos puertos o no lo tienen abiertos. He probado a usar un ClientSocket y si solo le pido comprobar un equipo me funciona bien (creo, ...), ahora si quiero comprobar varios equipos a la vez (todos los de un departamento, por ejemplo) , me empieza a dar error,... Bueno, cualquier ayuda me vendría bien,... Gracias. |
#2
|
|||
|
|||
Hola Besto,
No me quedo muy claro, pero creo que deberias trabajar con Threads (Hilos) para poder comprobar el mismo puerto en multiples ip. Lo que creo que estas intentando hacer es lo que se suele conocer como un "Sniffer". |
#3
|
|||
|
|||
#4
|
||||
|
||||
¿Como usas el Clientsocket? ¿Y que error te da?
|
#5
|
|||
|
|||
Bueno, gracias pmcastilla pero eso exactamente no es lo que quiero. Voy a ver si me explico.
La aplicación es para comprobar si los equipos tienen instalado diverso software y si el servicio está activo, RAdmin por ejemplo, entonces lo que queremos ver es si el puerto correspondiente esta abierto. Yo creo que el error que me da es debido a que no esta abierto, pero no se como esperar a que termine la comprobación antes de mandar la siguiente y yo creo que se me cruzan. Lo que hago es lo siguiente: while not fin de la base de datos do begin clientSocket.port := 2701; ClientSocket.Host := 'Dir IP1'; ClientSocket.Active := true; next; end; Me he fijado cuando pongo Active a true no siempre me salta el evento OnConnect. Bueno, Seoane el error que me da es el siguiente: Asyncronous socket error 10049 Gracias a los dos por vuestra rapidez. |
#6
|
||||
|
||||
Y si ponés todo entre un try ... except?
o
Última edición por duilioisola fecha: 10-10-2007 a las 16:45:24. |
#7
|
|||
|
|||
Ya probé con eso pero es que no me salta la excepción, tambien he puesto que me de un mensaje en el evento onerror y tampoco me sale nada.
Gracias de todos modos. |
#8
|
|||
|
|||
Hola Besto,
De casualidad, se que tal vez te digo una tonteria, pero intentaste poner un Break Pint e ir paso a paso para ver donde tilda? |
#9
|
|||
|
|||
Antes de realizar los cambios de ip debes cerrar el puerto, sino genera un conflicto y tirar error.
Proba el mismo codigo con esa extra linea.
|
#10
|
||||
|
||||
Un par de cosillas:
1 - Aquí tienes un código que hace lo que quieres. Pero ten en cuenta que si el puerto no esta abierto, puede tardar un poco de tiempo en terminar la función. Así que, o tienes paciencia o usas threads http://www.clubdelphi.com/foros/show...85&postcount=4 2 - En ese bucle que pones veo que pones active a TRUE pero no veo que lo pongas a FALSE. 3 - Si estas usando sockets asíncronos el try except de poco te va a servir. |
#11
|
|||
|
|||
Lo puse, y no tengo ni idea de donde falla, voy siguiendo todos los pasos y cuando saco un mensaje de final, me aparecen todos los errores y cuando pongo el clientsocket activo no se me ejecuta el evento onconect.
También pasa una cosa curiosa, yo pongo el clientsocket active:= true, pero cuando cambio la ip antes de cambiar el host compruebo si está activo para si está ponerlo a false y luego cambiar el host, bueno pues aunque en principio debia esta a true, la verdad es que esta a false, ... No sé si se entiende bien, porque no lo entiendo ni yo... |
#12
|
|||
|
|||
Estas usando un componente Indy? Como dice Seaone, debes cerrar el puerto antes de cargar la nueva informacion. En muchos casos hay que hacer un Disconnect y luego desactivar el puerto.
Tu ultimo comentario no lo he entendido. Pero tal vez si puedes poner el fragmento de codigo lo podamos analizar. |
#13
|
|||
|
|||
Gracias a todos, pero me parece que con el último mensaje de Seoane me va a funcionar. Lo voy a mirar con calma a ver como funciona, pero de momento he probado un par de departamentos y aunque tarda un poco, no me sale error y parece que va.
Gracias a todos, con vosotros es un placer preguntar. Comfirmado, es exactamente lo que quería, hay alguna cosa que no entiendo bien, pero funcionar, funciona. Lo demás es cosa de mirarlo con más calma. Última edición por Besto fecha: 11-10-2007 a las 11:48:43. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
ClientdataSet como saber si esta abierto? | Coco_jac | Varios | 4 | 13-04-2012 20:36:43 |
¿Puerto TCP abierto en remoto? | urtKami | API de Windows | 8 | 31-03-2008 22:40:34 |
Verificar si un puerto está abierto | aalejo | Redes | 6 | 02-03-2007 02:40:17 |
Saber si un puerto está en uso | Sr_Sombrero | Internet | 2 | 06-04-2006 16:26:38 |
Saber si esta abierto un documento Word | Investment | Servers | 2 | 13-05-2004 13:02:26 |
|