Función de Pton inet en lenguaje C

Función de Pton inet en lenguaje C

Las funciones de socket usan estructuras en sus argumentos de entrada que contienen datos específicos del cliente y servidor. La información más importante en estas estructuras es, sin duda, las direcciones IP.

Hay varios tipos de estructuras utilizadas por las funciones de socket para almacenar estas direcciones. Por ejemplo: Sockaddr, AdDrinfo o In_addr, etc.

Independientemente del tipo de estructura en la que se almacenan, las direcciones IP no están codificadas, lo que significa que cada uno de los números en sus campos está representado por su equivalente binario. Esto significa que en ciertos casos, es necesario convertir las direcciones IP en cadenas o cadenas a direcciones IP para trabajar con ellas.

En esto Pista de Linux Artículo, aprenderá cómo convertir las cadenas en direcciones IP utilizando el inet_pton () función.

Observaremos la sintaxis de esta función y una descripción teórica de cómo funciona, los argumentos de entrada y salida, y el tipo de datos en cada uno de ellos.

Luego aplicamos lo que aprendimos en ejemplos prácticos que incluyen fragmentos de código e imágenes que muestran cómo la función inet_pton () en el idioma C convierte las cadenas en direcciones IP.

Sintaxis de la función inet_pton () en lenguaje C

int inet_pton (int Af, const char *src, void *dst);

Descripción de la función inet_pton () en lenguaje C

El inet_pton () la función convierte la cadena a la que se hace referencia en SRC a una dirección de red de la familia que se especifica en AF. El resultado de este proceso es una dirección en formato binario directo, devuelto en la estructura que es señalada por desestimado.

Esta función acepta direcciones IPv4 e IPv6 y es muy útil cuando queremos crear las aplicaciones de conexión en las redes locales donde conocemos la dirección IP a la que queremos conectarnos.

Inet_pton () es complementario a la función inet_ntop () y realiza una conversión inversa.

A continuación, observamos los argumentos de entrada de esta función en detalle:

AF: Esta entrada especifica la familia de direcciones a convertir.

AF_INET convierte la cadena en una dirección familiar IPv4.

AF_INET6 convierte la cadena en una dirección de la familia IPv6.

SRC: La cadena o puntero que especifica la dirección en formato de texto.

Dest: El puntero a la estructura donde almacenar la dirección en formato binario directo. Estas estructuras pueden ser de tipo sockaddr, sockaddr_in, sockaddr_in6, etc.

Si la conversión es exitosa, esta función devuelve 1. Si ocurre un error, devuelve 0. El código de error se puede consultar en el errar variable global.

El inet_pton () la función se define en el "INET.H "encabezado y es uno de una serie de".H "archivos que definen las funciones de conexión y se almacenan en la carpeta" ARPA ". Para usar esta función, debemos incluirla en nuestro archivo C de la siguiente manera:

#incluir

Cómo convertir una cadena en una dirección IP usando la función inet_pton () en el idioma C

En el siguiente ejemplo, convertimos el buffer Cadena en una dirección y guárdela en una estructura de sockaddr_in escriba cuyo puntero es adr_in. Para hacer esto, asignamos el "192.168.1.1 " Dirección a la cadena de búfer y declare la estructura adr_in y su puntero.

Entonces, de la si condicional, llamamos al inet_pton () y pasar a la familia de direcciones como argumentos de entrada AF, que en este caso es af _inet. Pasamos la dirección que se almacena en el buffer Como el segundo argumento en formato de cadena. Finalmente, pasamos la dirección del adr_in puntero de la estructura donde almacenamos la dirección en formato binario.

Si se produce un error durante la conversión, el programa ingresa al si condicional y muestra el siguiente mensaje: "Error de conversión".

Si inet_pton () no devuelve un error, verificamos la dirección que se almacena en la estructura addr_in y usamos la función complementaria inet_ntop () para convertirla nuevamente en una cadena y emitirla a la shell con printf ().

El siguiente es el código que realiza la conversión con inet_pton (). Luego, convierte la dirección en una cadena e imprime el resultado en consola de comando:

#incluir
#incluir
#incluir
#incluir
int main ()

Char Buffer [inet_addrstrlen] = "192.168.1.1 ";
struct sockaddr_in *adr_in;
//conversión
if (inet_pton (AF_Inet, buffer, & addr_in) == 0)
printf ("Error de conversión");
regresar 1;
// Verifique la dirección almacenada
memset (& buffer, '\ 0', sizeof (buffer));
inet_ntop (AF_Inet, & addr_in, buffer, inet_addrstrlen);
printf ("Dirección IP: %s \ n \ n", buffer);

La siguiente imagen muestra la compilación y ejecución de este código:

La siguiente figura muestra el resultado de enviar una cadena con un formato de dirección no válido. En este caso, inet_pton () devuelve 0 y el flujo del programa ingresa a la condición if donde se muestra un mensaje de error.

Cómo convertir una cadena en una dirección IPv6 usando la función inet_pton () en el idioma C

Para convertir una cadena en una dirección familiar IPv6, se puede usar el código del ejemplo anterior. Solo necesitamos usar las estructuras y buffers con los tamaños que son compatibles con este tipo de dirección y establecer la familia AF _INET6 en AF aporte.

En este caso, el tamaño del búfer debe ser inet6_addrstrlen y la estructura de destino debe ser de tipo sockaddr_in6. Aquí está el código modificado para convertir las cadenas en direcciones IPv6:

#incluir
#incluir
#incluir
#incluir
int main ()

Char buffer [inet6_addrstrlen] = "fd10: 1aff: 48ca: b5f4: 0: 0: 0: 0";
struct SOCKADDR_IN6 *ADDR_IN;
//conversión
if (inet_pton (AF_Inet6, buffer, & addr_in) == 0)
printf ("Error de conversión");
regresar 1;
// Verifique la dirección almacenada
memset (& buffer, '\ 0', sizeof (buffer));
inet_ntop (AF_INET6, y addr_in, buffer, inet6_addrstrlen);
printf ("\ n \ nip dirección: %s \ n \ n", buffer);

La siguiente imagen muestra la compilación y ejecución de este código que convierte una cadena en una dirección IPv6:

Conclusión

En esto Sugerencias de Linux Artículo, explicamos cómo convertir el formato de cadena en direcciones IP en binario directo utilizando el inet_pton () función.

Hemos visto una descripción teórica de esta función, sus argumentos de entrada y el tipo de datos que cada procesa. Luego, implementamos esta función en ejemplos prácticos que muestran cómo convertir las cadenas de caracteres en direcciones IP almacenadas en estructuras de tipo sockaddr_in que se usan con mayor frecuencia para establecer las conexiones.

Esperamos que hayas encontrado este artículo útil. Suscríbase a nuestro sitio web y use nuestro motor de búsqueda para más artículos C y sugerencias de Linux.