Looking for dns Keywords? Try Ask4Keywords

dnsEmpezando con dns


Observaciones

El Sistema de nombres de dominio (DNS) es una base de datos global jerárquica y distribuida , que se utiliza más comúnmente para asignar nombres de host a sus respectivas direcciones IP. Se define en RFC 1034 y RFC 1035 , y numerosas actualizaciones de los mismos.

Un nombre de dominio es una secuencia de etiquetas separadas por el carácter de punto ( . ). Cada etiqueta puede tener un máximo de 63 caracteres, y un nombre de dominio puede tener un máximo de 255 caracteres.

El DNS a menudo se describe como una estructura de árbol, con la "zona raíz" en la parte superior, los Dominios de nivel superior (TLD), por ejemplo, com , uk , etc. debajo de eso, etc. Dentro de un nombre de dominio, las etiquetas se muestran en una "pequeña endian "orden con la etiqueta del nodo de hoja que aparece más a la izquierda, y el TLD que aparece más a la derecha. Si aparece un período final después del TLD, se dice que el nombre es un Nombre de dominio completo , donde el período final representa la zona raíz en sí.

Realizando búsquedas de nombres en C

La función getaddrinfo() es la función POSIX recomendada para interactuar con el sistema de resolución del sistema. Dependiendo de la configuración del sistema, realizará búsquedas de nombres en el DNS, /etc/hosts , mDNS, etc.

Es preferible a la familia de funciones gethostbyname() desuso porque admite el direccionamiento IPv4 e IPv6, y también puede realizar búsquedas de nombres de servicio al mismo tiempo (por ejemplo, mapeo http al puerto 80)

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

...

struct addrinfo hints;
struct addrinfo *result;
int r;

memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;           // allow IPv4 or IPv6
hints.ai_socktype = SOCK_STREAM;       // make a stream (TCP) connection

r = getaddrinfo(hostname, "http", &hints, &result);
if (r != 0) {
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(r));
} else {
    // iterate over the linked list
    for (struct addrinfo *rp = result; rp != NULL; rp = rp->ai_next) {
        // use rp fields to create a socket and connect to it 
    }
    freeaddrinfo(result);
}