PDA

Ver la Versión Completa : Necesito validar una cadena de IP y Puerto ingresado en un Edit1 (xx.xx.xx.xx:port)


Black_Ocean
18-11-2006, 00:03:41
Hola ClubDelphi!

Primero que nada... quiero felicitarlos por todos estos años de ayuda que han dado a todo los usuarios de Delphi en Internet ;) Hoy me inscribí por primera vez acá y es mi primer posteo :P espero que me puedan ayudar :D

Bueno amigos... mi consulta es la siguiente:

Ando buscando una función que valide una IP y puerto ingresada por el usuario en un Edit con el siguiente formato:

xx.xx.xx.xx:Port

ejemplos

210.114.174.96:4480
128.114.63.15:3128
138.23.204.133:3128
138.23.204.133:3127
140.247.60.126:3128

En pocas palabras, lo que quiero es que valide ese formato de cadena ingresado por el usuario (formato para tipo proxy, socks 4 y socks 5)

Realmente la he buscado en todo internet y no he encontrado esta función para este requerimiento :S

De antemano, muchísimas gracias y espero que me puedan ayudar :)

Cordiales saludos ;)

seoane
18-11-2006, 00:30:12
Vamos con un poco de código:

uses Winsock;

function Validar(Str: string): Boolean;
var
i: integer;
ip: string;
begin
Result:= FALSE;
if Pos(':',Str) > 0 then
begin
ip:= Copy(Str,1,Pos(':',Str)-1);
Delete(Str,1,Pos(':',Str));
Result:= (inet_addr(PChar(ip)) <> INADDR_NONE) and
TryStrToInt(Str,i) and (i<65535) and (i>0);
end;
end;


La función anterior separa en dos partes la cadena, la ip por un lado y el puerto por el otro. Luego intenta convertir la ip y el puerto a sus correspondientes valores binarios, si no puede quiere decir que no son validos.

Un ejemplo de como funciona:

// Estas espresiones devuelven TRUE
Validar('210.114.174.96:4480'); // La ip en formato decimal
Validar('0xd2.0x72.0xae.0x60:4480'); // La ip en formato hexadecimal
Validar('210.0x72.174.96:4480'); // La ip en formato mixto

// Estas devuelven FALSE
Validar('210.300.174.96:4480'); // Uno de los valores esta fuera del rango
Validar('210.hola.174.96:4480'); // Esto no es una ip
Validar('210.114.174.96:1000000'); // El puerto esta fuera del rango

Black_Ocean
18-11-2006, 00:46:41
Vamos con un poco de código:

Amigo, he probado tu código y me funciona perfectamente para mi requerimiento, realmente te has pasado, muy agradecido por la rápida y certera respuesta. Muy contento, realmente necesitaba mucho esta función! :P

Gracias a ti y a ClubDelphi por esto, estoy en deuda contigo ;)

Gracias nuevamente :D

saludos ;)