PDA

Ver la Versión Completa : ¿Puerto TCP abierto en remoto?


urtKami
08-11-2006, 09:18:43
Hola a tod@s.

Necesito averiguar si un perto TCP está abierto en una máquina Remota.
¿Es posible? ¿Cómo?
Gracias.

ppb
08-11-2006, 15:22:21
Hay muchas herramientas , ahi va una http://sourceforge.net/projects/nmapwin

Crandel
08-11-2006, 15:32:50
Me imagino a que se refiere a hacerlo por código y no con algun programa externo.

Nunca lo hice pero podrias probar hacer un ping a un puerto específico. Creo que la suite de Indy trae un componente para hacer ping.

Aunque no estoy seguro si se puede cambiar la direccion del puerto.

Ahhhh, otra idea que se acaba de ocurrir intentar, es conectarte con ese puerto, si te responde es porque esta abierto :D

seoane
08-11-2006, 15:47:09
Nunca lo hice pero podrias probar hacer un ping a un puerto específico. Creo que la suite de Indy trae un componente para hacer ping.


Hasta donde yo se "ping" utiliza el protocolo ICMP que no tiene puertos.

En cuanto a la pregunta urtKami no conozco otra forma de hacerlo que intentar conectar con ese puerto, si podemos esta abierto, si no podemos esta cerrado :D


uses WinSock;

function EstaAbierto(Host: string; Puerto: Integer): Boolean;
var
WSAData: TWSADATA;
Address: u_long;
HostEnt: phostent;
Addr: sockaddr_in;
CSocket: Tsocket;
begin
Result:= FALSE;
if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
begin
Address:= inet_addr(Pchar(Host));
if Address = INADDR_NONE then
begin
HostEnt:= gethostbyname(PChar(Host));
if HostEnt <> nil then
Address:= PInteger(HostEnt.h_addr_list^)^;
end;
if Address <> INADDR_NONE then
begin
CSocket:= socket(AF_INET, SOCK_STREAM, 0);
if CSocket <> INVALID_SOCKET then
begin
Addr.sin_family:= AF_INET;
Addr.sin_addr.S_addr:= Address;
Addr.sin_port:= htons(Puerto);
Result:= connect(CSocket, Addr, Sizeof(Addr)) <> SOCKET_ERROR;
Closesocket(CSocket);
end;
end;
WSACleanup;
end;
end;


// Por ejemplo
if EstaAbierto('www.clubdelphi.com',80) then
ShowMessage('Esta abierto')
else
ShowMessage('Esta cerrado');


PD: Si el puerto esta cerrado, puede que tarde un rato en responder, ten paciencia :D

Crandel
08-11-2006, 16:01:22
En cuanto a la pregunta urtKami no conozco otra forma de hacerlo que intentar conectar con ese puerto, si podemos esta abierto, si no podemos esta cerrado :D

A uno se le ocurre una idea y vos ya tiras el código :eek:

urtKami
08-11-2006, 21:35:12
Gracias.
Probaré a ver si es operativo (tengo que ver muchas direcciones), pero esperaba que hubiera una forma mas directa con el WinApi.
Ya os comentaré.

seoane
08-11-2006, 21:40:51
Gracias.
Probaré a ver si es operativo (tengo que ver muchas direcciones), pero esperaba que hubiera una forma mas directa con el WinApi.
Ya os comentaré.

:confused: No se que idea tienes del "WinApi", pero la última vez que mire, las funciones que utilizo formaban parte de la API. ;)

urtKami
11-11-2006, 19:02:39
Ya lo he conseguido.
Perdon por el retraso en el post, pero estuve fuera por trabajo.

Sabía que era con wl API de WinSock pero no sabía como.

Muchas gracias.

fide
31-03-2008, 21:40:34
eso esta buenisimo, sobre todo para hacer un escaneador de puertos!