Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2007
Besto Besto is offline
Miembro
 
Registrado: abr 2006
Posts: 118
Poder: 19
Besto Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 10-10-2007
pmcastilla pmcastilla is offline
Miembro
 
Registrado: jul 2006
Posts: 22
Poder: 0
pmcastilla Va por buen camino
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".
Responder Con Cita
  #3  
Antiguo 10-10-2007
pmcastilla pmcastilla is offline
Miembro
 
Registrado: jul 2006
Posts: 22
Poder: 0
pmcastilla Va por buen camino
Tal vez te sirva este articulo:
http://www.clubdelphi.com/foros/show...ghlight=Thread
Saludos!!!
Responder Con Cita
  #4  
Antiguo 10-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿Como usas el Clientsocket? ¿Y que error te da?
Responder Con Cita
  #5  
Antiguo 10-10-2007
Besto Besto is offline
Miembro
 
Registrado: abr 2006
Posts: 118
Poder: 19
Besto Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 10-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Y si ponés todo entre un try ... except?

Código Delphi [-]
while not fin de la base de datos do
begin
   clientSocket.port := 2701;
   ClientSocket.Host := 'Dir IP1';
   try
      ClientSocket.Active := true;
   except
      on e:exception do 
         ShowMessage('Error en ClientSocket.Active '+#13+#10+e.Message)
   end
   next;
end;
o
Código Delphi [-]
while not fin de la base de datos do
begin
   clientSocket.port := 2701;
   ClientSocket.Host := 'Dir IP1';
   try
      ClientSocket.Active := true;
   except
      on e:exception do 
         ShowMessage('Puerto '+IntToStr(clientSocket.port)+' de la direccion '+ClientSocket.Host+' está cerrado.'+#13+#10+e.Message)
   end
   next;
end;

Última edición por duilioisola fecha: 10-10-2007 a las 15:45:24.
Responder Con Cita
  #7  
Antiguo 10-10-2007
Besto Besto is offline
Miembro
 
Registrado: abr 2006
Posts: 118
Poder: 19
Besto Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 10-10-2007
pmcastilla pmcastilla is offline
Miembro
 
Registrado: jul 2006
Posts: 22
Poder: 0
pmcastilla Va por buen camino
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?
Responder Con Cita
  #9  
Antiguo 10-10-2007
pmcastilla pmcastilla is offline
Miembro
 
Registrado: jul 2006
Posts: 22
Poder: 0
pmcastilla Va por buen camino
Post

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.
Código Delphi [-]
while not fin de la base de datos do
begin
//Extra Linea
   ClientSocket.Active := False;
   clientSocket.port := 2701;
   ClientSocket.Host := 'Dir IP1';
   try
      ClientSocket.Active := true;
   except
      on e:exception do 
         ShowMessage('Puerto '+IntToStr(clientSocket.port)+' de la direccion '+ClientSocket.Host+' está cerrado.'+#13+#10+e.Message)
   end
   next;
end;
Responder Con Cita
  #10  
Antiguo 10-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 10-10-2007
Besto Besto is offline
Miembro
 
Registrado: abr 2006
Posts: 118
Poder: 19
Besto Va por buen camino
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...
Responder Con Cita
  #12  
Antiguo 10-10-2007
pmcastilla pmcastilla is offline
Miembro
 
Registrado: jul 2006
Posts: 22
Poder: 0
pmcastilla Va por buen camino
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.
Responder Con Cita
  #13  
Antiguo 10-10-2007
Besto Besto is offline
Miembro
 
Registrado: abr 2006
Posts: 118
Poder: 19
Besto Va por buen camino
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 10:48:43.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ClientdataSet como saber si esta abierto? Coco_jac Varios 4 13-04-2012 19:36:43
¿Puerto TCP abierto en remoto? urtKami API de Windows 8 31-03-2008 21:40:34
Verificar si un puerto está abierto aalejo Redes 6 02-03-2007 01:40:17
Saber si un puerto está en uso Sr_Sombrero Internet 2 06-04-2006 15:26:38
Saber si esta abierto un documento Word Investment Servers 2 13-05-2004 12:02:26


La franja horaria es GMT +2. Ahora son las 21:43:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi