SoloCodigo

Programación Web y Scripting => ASP => Mensaje iniciado por: franc en Miércoles 14 de Junio de 2006, 11:52

Título: Validar Direccion Ip
Publicado por: franc en Miércoles 14 de Junio de 2006, 11:52
¿ Conoceis algun metodo para validar direciones IP ?
del tipo xxx.xxx.xxx.xxx dondelas xxx pueden tomar valores hasta 255 y pueden haber x que se omitan por ser la primera x de cada grupo y además ser cero ( ej. 195.2.0.254 )

He buscado por todas partes y no hay forma de encontrar un RegExp que resuelva esto, ¿ alguien puede ayudarme ?

gracias
Título: Re: Validar Direccion Ip
Publicado por: jpaler en Miércoles 14 de Junio de 2006, 18:22
mira compañero, aqui tengo uno q lo acabo de hacer, pero
lo hice en java (EL MEJOR LENGUAJE DE PROGRAMACION DEL MUNDO):
...,aki te dejo para q lo pases a ASP...listo:

Código: Text
  1.  
  2.     /**
  3.      * Este metodo devuelve true si la direccion ip pasada como parametro
  4.      * es valida o false en caso contrario
  5.      * @param dir String
  6.      * @return boolean
  7.      */
  8.     public static boolean esUnaDireccionIPValida( String dir ) {
  9.         //En java un StringTokenizer es una version mejorada del String
  10.         //  q permite darle formato a las cadenas. Al llamar el constructor
  11.         //  y pasar por ej. la direccion="255.192.168.1" y el String punto "." lo q
  12.         //  hago es separar la ip y dejar a st={"255","192","168","1"}
  13.         StringTokenizer st = new StringTokenizer( dir, "." );
  14.  
  15.         //ahora verifico q si el tamaño de st no es 4, osea, los 4 numeros
  16.         //  q debe tener toda direcicon ip, digo q esta mal la direccion ip.
  17.         if ( st.countTokens() != 4 ) {
  18.             return false;
  19.         }
  20.        
  21.         //ahora sigo verificando, y le digo a st con el metodo nextTokens()
  22.         //  q me de uno por uno sus elementos, es decir, los 4 numeros de las
  23.         //  de la direcicon ip. Luego verifo q el numero tenga solo 1 o 3 digitos y
  24.         //  q este entre 0 y 255. Y listo, eso es todo.
  25.         while ( st.hasMoreTokens() ) {
  26.             String nro = st.nextToken();
  27.             if ( ( nro.length() > 3 ) || ( nro.length() < 1 ) ) {
  28.                 return false;
  29.             }
  30.             int nroInt = 0;
  31.             try {
  32.                 nroInt = Integer.parseInt( nro );
  33.             }
  34.             catch ( NumberFormatException s ) {
  35.                 return false;
  36.             }
  37.             if ( ( nroInt < 0 ) || ( nroInt > 255 ) ) {
  38.                 return false;
  39.             }
  40.         }
  41.         return true;
  42.     }
  43.  
  44.  

Si tienes alguna duda, no hay problema... solo la comentas y listo.
Espero y te sirva...
salu2 !!!
Título: Re: Validar Direccion Ip
Publicado por: tonilope en Miércoles 14 de Junio de 2006, 19:05
Yo me hice este en C (posiblemente el mejor lenguaje de la historia :P) hace ya bastante:

Código: Text
  1.  
  2. int compruebaIP(char *ip){
  3.  
  4.   char octeto[4];
  5.   int contador, j, valida, num;
  6.  
  7.  
  8.   contador=0;
  9.   valida=1;
  10.   num=0;
  11.  
  12.   while(contador<=strlen(ip) && valida)    
  13.   {
  14.     j=0;
  15.  
  16.  
  17.     while(ip[contador]!='.' && j<3 && ip[contador]!='\0' && valida)      
  18.    {
  19.  
  20.       if(ip[contador]>=48 && ip[contador]<=57 )            
  21.             octeto[j++]=ip[contador++];
  22.       else
  23.             valida=0;
  24.      
  25.     }
  26.  
  27.     octeto[j]='\0';
  28.  
  29.  
  30.     if(j>0 && (ip[contador]=='.' || ip[contador]=='\0') && atoi(octeto)<=255 && atoi(octeto)>=0)              
  31.          num++;
  32.     else
  33.          valida=0;
  34.  
  35.  
  36.      contador++;
  37.  
  38.   }
  39.  
  40.  
  41.   if(num!=4)        
  42.           valida=0;
  43.  
  44.  
  45.   return(valida);
  46.  
  47. }
  48.  
  49.  

1º) Comprueba que sólo haya cifras en cada octeto (como máximo 3 cifras por octeto).

2º) Comprueba que el octeto esté entre 0 y 255.

3º) Comprueba que la Ip tenga exactamente 4 octetos.

Si pasa los 3 filtros, la IP es válida.

Salu2 ;)
Título: Re: Validar Direccion Ip
Publicado por: ROBER.29 en Jueves 15 de Junio de 2006, 10:06
Hola,

No he probado la función que te acabo de hacer porque no tengo tiempo, pero creo que si que te funcionará, pruebala y me cuentas.

Código: Text
  1.  
  2. 'Esta función recibe como parámetro el valor de la IP que se tiene que validar (Ej: 192.168.2.25)
  3. 'y devuelve True en el caso de que la IP sea correcta y False en caso de que sea errónea.
  4. Function validarIP (ValorIP)
  5.   Set objRegExp = New RegExp
  6.   objRegExp.Pattern = "^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$"
  7.   objRegExp.IgnoreCase = True
  8.   objRegExp.Global = True
  9.   If Not objRegExp.Test(ValorIP) Then
  10.     validarIP = False
  11.   Else
  12.     validarIP = True
  13.   End If
  14. End Function
  15.  
  16.  
  17.  

Ejemplo de como se utilizaría

Código: Text
  1.  
  2. If validarIP("192.168.2.25") Then
  3.   response.write "IP Correcta."
  4. Else
  5.   response.write "IP Errónea."
  6. End If
  7.  
  8.  

Espero que te sirva.

Un saludo.
Título: Re: Validar Direccion Ip
Publicado por: franc en Viernes 23 de Junio de 2006, 12:34
gracias a todos, me ha venido muy bien vuestros codigos,

un saludo
Título: Re: Validar Direccion Ip
Publicado por: ing_marco en Viernes 23 de Junio de 2006, 14:20
Excelente ROBER.29, tu codigo de validacion con expresiones regulares esta muy bien, de manera k lo puedes poner asi como lo hiciste o simplemente poner un validator de asp.net y poner la expresion regular el resto se encarga el .Net.
Título: Re: Validar Direccion Ip
Publicado por: ROBER.29 en Jueves 29 de Junio de 2006, 10:09
Hola,

Me alegro que haya funcionado, es que la hice de prisa y corriendo y ni tan siquiera la probé.

Un placer ayudaros.

Un saludo.