PDA

Ver la Versión Completa : Funcion para validar IP


Mauricio Correa
29-09-2003, 11:27:47
Hola que tal, alguien conoce, tiene o ha visto alguna función por ahi para validar la direccion IP que esta en un cuadro de texto (edit1). Se supone que es ingresada por el usuario.

Saludos y gracias!!

__cadetill
29-09-2003, 12:53:33
qué significa validar la IP? mirar si ya existe o mirar si está bien construida?

Si es la segunda, sólo tienes que controlar que sean 4 tuplas de numero inferiores a 255 y mayores o iguales a 0 separados por puntos

Si es la primera, en mi web tienes dos demos de cómo capturar las IPs de una red que te puede servir para lo que quieres

Mauricio Correa
29-09-2003, 22:50:57
Me referia a que si alguien tiene ECHA una funcion para validar la direccion IP que ha ingresado el usuario, queria saber si habia una función CONFIABLE que estuviera echa en algún lado, es decir validar en sintaxis y semantica pero no si este IP responde o esta activo.

__cadetill
30-09-2003, 10:04:09
Pues hecha, lo que se dice hecha, no la tengo, pero tampoco lo veo demasiado difícil (a priori)

Básicamente seria recorrer con un bucle el string que contiene la IP


respuesta := true;
while i <= length(StrIP) do


e ir almacenando el valor en otro hasta encontrar los TRES puntos


if StrIP[i] <> '.' then // no es '.'
str := str + StrIP[i]
else // es punto -> comprobamos número
begin
if TryStrToInt(str, myInt) then
begin
if not (myInt in [0..255]) then
begin
ShowMessage('IP incorrecta');
Respuesta := false;
Break;
end;
end
else
begin
ShowMessage('IP incorrecta');
Respuesta := false;
Break;
end;
end;

y verificar fuera del bucle la última tupla de la misma manera y verificar el estado de la variable Respuesta

Bueno, espero que la idea te de pistas por donde ir

roman
30-09-2003, 17:04:43
Otra forma:


function IsValidIP(S: String): Boolean;
var
Strings: TStringList;

begin
Result := false;

Strings := TStringList.Create;
Strings.Delimiter := '.';
Strings.DelimitedText := S;

if Strings.Count <> 4 then exit;

repeat
Result := (StrToIntDef(Strings[0], -1) in [0..255]);
Strings.Delete(0);
until (Strings.Count = 0) or not Result;

Strings.Free;
end;


// Saludos

__cadetill
30-09-2003, 18:48:11
Posteado originalmente por roman
Otra forma:

Ciertamente, ne me he acordado del Delimiter de los TStrings :)

guillotmarc
30-09-2003, 22:54:28
Hola.

Si quieres afinar más tu algoritmo de validación. Puedes comprobar que la dirección IP sea una dirección de valida de clase A, B o C

http://es.tldp.org/Manuales-LuCAS/GARL2/garl2/x-087-2-issues.ip-addresses.html

Ejemplos de direcciones que no són validas :

127.0.0.1 (dirección de loopbak, aunque es una dirección valida no apunta a ninguna maquina sinó que enviará a si mismo cualquier paquete con esa dirección)
192.1698.0.0 (indica la red 192.168 y no una maquina)
10.255.255.255 (para hacer un broadcast a todos los nodos de la red 10)
254.0.0.1 (la red no es de clase A, B, C)

Saludos.

Mauricio Correa
01-10-2003, 15:04:25
Muchas gracias a todos!!