tracer switch privilegiado por para modo línea dominio deshabilitar desactive desactivar contraseña consola comando cifrada búsqueda busqueda c unix networking

switch - deshabilitar busqueda de dominio packet tracer



¿Cómo hace getaddrinfo() la búsqueda de DNS? (5)

getaddrinfo () es una función que debemos usar antes de crear un socket () o conectar () ing, ¿verdad? Entonces, ¿cómo se comunica getaddrinfo con el servidor DNS en primer lugar?

PD: ¿Dónde puedo ver la fuente completa de getaddrinfo?


¿Su sistema Unix tiene el archivo /etc/nsswitch.conf? Si es así, entonces la entrada "hosts" proporciona el orden de búsqueda para resolver los nombres de host en direcciones IP. ¿Su sistema tiene el archivo /etc/resolv.conf? Si es así, entonces especifica qué servidores DNS usar.

Como puede ver, getaddrinfo () puede hacer bastante (y puede tomar un tiempo).



La respuesta corta es " pregunta al sistema ", que a su vez sabe cómo hacer búsquedas de DNS y qué servidores usar.

getaddrinfo() está documentado en la página de manual de getaddrinfo(3) , lo que significa que es una función de biblioteca en C. También es una función POSIX , por lo que no hay una "fuente" canónica; Cada biblioteca C estándar de un sistema operativo que cumpla con POSIX implementará su propia versión. De cualquier manera, la fuente de esa función probablemente no sea demasiado esclarecedora, ya que solo llamaría a otras funciones y API de OS, y tendría que profundizar bastante para llegar al mecanismo de DNS real. Es mejor que lea la documentación del propio protocolo DNS si está interesado en cómo funciona.


getaddrinfo() probable que getaddrinfo() realice una llamada de connect() detrás de la escena, sin embargo, ya conoce la dirección IP del servidor DNS al que necesita conectarse para consultar la dirección del host que le está solicitando.

getaddrinfo() solo es necesario si desea asignar " www.somehost.com " a una dirección IP, no es necesario como cebador para llamar a connect() .

Probablemente pueda encontrar el código fuente completo de getaddrinfo() en las fuentes de glibc que podría encontrar aquí (entre otros lugares).

Espero que te aclare las cosas.


No es necesario llamar a getaddrinfo() antes de crear un socket o conectarse. Se utiliza para traducir un nombre de dominio, como .com , a una dirección IP como 69.59.196.211 . Si conoce la dirección IP, puede conectarse directamente a esa dirección y no es necesario utilizar getaddrinfo() . getaddrinfo() usa el protocolo DNS para comunicarse con sus servidores de nombres, que están configurados con su dirección IP.

El código fuente de glibc está here .