• Sábado 14 de Diciembre de 2024, 20:23

Autor Tema:  Validación De Ip Ingresada Por Usuario  (Leído 1266 veces)

luchot

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Validación De Ip Ingresada Por Usuario
« en: Martes 14 de Junio de 2005, 18:01 »
0
hola  a todos,

Estoy haciendo un programa en C que debe manejar nros de IP para luego gestionar un firewall con el modulo net_filter del kernel de Linux. Dado que necesito que el mismo sea performante, debo de hacerlo en c para gestionar el uso de memoria y tal.

El problema que tengo es sinceramente muy básico, pero no logro descifrar donde esta el problema....una de las validaciones que debo hacer es la siguiente:

Formato IP válido: n1.n2.n3.n4

Ejemplos: 192.168.0.101, 255.255.255.0, 66.98.151.220, 0.0.0.0, etc


Donde "n1, n2, n3, n4" deben ser menor  o igual a 255 (n<=255)

El problema es que el Nro de IP se ingresa por teclado lo almaceno en un array de tipo char, en este caso nuevaIP[15] (16 espacios: 12 para posibles nros, 3 caracteres punto "." y el final de cadena '\n')

He hecho un bucle for donde pregunto por el caracter "." sino lo encuentro debo de almacenar en una variable el primer nro, y asi consecutivamente.

Un ejemplo suponiendo que la cadena ingresada sea "192.98.151.220"

Citar
i=0;
char aux;
char trio[3];
while (nuevaIP != '\n') {
       charter = ("%c", nuevaIP);
       aux= ("%c", nuevaIP);
        if (charter != 46) {
       // aux se carga con "1", "9", y "2" antes de encontrar un punto en la cadena
         aux = ("%c", aux);
                // esto me da error, y si uso "atoi" tambien y sino me carga el ascii :(
   trio = aux;
        }else{
                 //se encontro un punto, trio debe de contener "192"

                //se encontro un punto debo inicializar trio[] a cero,  para
                // seguir evaluando el segundo grupo de nros.      
        }
        i++;
}
En resumen, necesito cargar una variable int ubicada entre los caracteres "." de la cadena, para luego verificar que la misma sea menor a 255.

Alguna idea para solucionar este tema? Desde ya muchas gracias por su interes,

Mis saludos;

luchot-

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Validación De Ip Ingresada Por Usuario
« Respuesta #1 en: Martes 14 de Junio de 2005, 18:44 »
0
Hola que tal.

La verdad tienes unas variables que estan de mas, esto lo puedes hacer de la siguiente manera:
Código: Text
  1.  
  2. #include&#60;stdio.h&#62;
  3. #include&#60;string.h&#62;
  4. int main(){
  5.     char ip[16];
  6.     char trio[3];
  7.     printf(&#34;ip: &#34;);
  8.     scanf(&#34;%s&#34;,ip);
  9.     int i=0,j=0;
  10.     while(i&#60;strlen(ip)){
  11.          if(ip[i] != 46){
  12.            trio[j]=ip[i];
  13.            j++;
  14.            }
  15.          else{
  16.              printf(&#34;%s&#092;n&#34;,trio);
  17.              for(j=0;j&#60;3;j++)
  18.                 trio[j] = 0;
  19.              j=0;
  20.              }
  21.          i++;
  22.          }
  23.     printf(&#34;%s&#092;n&#34;,trio);
  24.     return 0;
  25.      }
  26.  
  27.  
en donde esta printf("%s\n",trio); debes de cambiar el código, usando atoi para convertir tu cadena a enteros y hacer la comparación que deseas.

Hasta luego.

luchot

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Validación De Ip Ingresada Por Usuario
« Respuesta #2 en: Martes 14 de Junio de 2005, 19:35 »
0
Excelente fuhrer! ha funcionado a la perfección, muchas gracias!

Tienes razón, me estaba complicando por demas, no me quedaba clara la división en cadenas para luego convertirla en número entero :P

Nuevamente gracias por tu ayuda, saludos;

Luchot