1 / 19

Chapter 11

Name and Address Conversions Juha Jääskeläinen. Chapter 11. Sisältö. DNS gethostbyname gethostbyaddr getservbyname & getservbyport getaddrinfo gai_strerror freeaddrinfo getnameinfo re_entrant ongelmat Hylätyt Ipv6 funktiot Yhteenveto. Domain Name System. IP osoitteet nimiksi

annora
Download Presentation

Chapter 11

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Name and Address Conversions Juha Jääskeläinen Chapter 11

  2. Sisältö • DNS • gethostbyname • gethostbyaddr • getservbyname & getservbyport • getaddrinfo • gai_strerror • freeaddrinfo • getnameinfo • re_entrant ongelmat • Hylätyt Ipv6 funktiot • Yhteenveto

  3. Domain Name System • IP osoitteet nimiksi • Host Name • Yksinkertainen: solaris, freebsd • FQDN: solaris.unpbook.com. • Resource Records • A, AAAA, PTR, MX, CNAME aix IN A 192.168.42.2 IN AAAA 3ffe:b80:1f8d:2:204:acff:fe17:bf38 IN MX 5 aix.unpbook.com. IN MX 10 mailhost.unpbook.com. ....

  4. Tyypillinen rakenne Application Application code Function call Function return UDP Request Local name server other name servers Resolver code UDP Reply Resolver configuration files

  5. DNS:n vaihtoehdot • Staattiset tiedostot • /etc/hosts • Network Information System (NIS) • Light Weight Directory Access Protocol (LDAP) • Paljon muita OS kohtaisia virityksiä

  6. gethostbyname #include <netdb.h> struct hostent *gethostbyname(const char *hostname); Paluuarvot: NULL virhe (h_errno asetettu) • Yrittää löytää IP-osoitteen nimen avulla • Ainoastaan Ipv4 osoitteille

  7. Hostent rakenne struct hostent { char *h_name; /* official (canonical) name of host */ char **h_aliases; /* pointer to array of pointers to alias names */ int h_addrtype;/* host address type: AF_INET */ int h_length; /* length of address: 4 */ char **h_addr_list;/* ptr to array of ptrs with IPv4 addrs */ }; Virhekoodit: (h_errno) HOST_NOT_FOUND TRY_AGAIN NO_RECOVERY NO_DATA (NO_ADDRESS)

  8. gethostbyaddr #include <netdb.h> struct hostent *gethostbyaddr(const char *addr, socklen_t len, int family); Paluuarvot: NULL virhe (h_errno asetettu) • Hakee nimen osoitteen avulla • Käyttää hyväkseen PTR kenttiä

  9. getservbyname&getservbyport • /etc/services #include <netdb.h> struct servent *getservbyname(const char *servname, const char *protoname); struct servent *getservbyport(int port, const char *protoname); struct servent { char *s_name; /* official service name */ char **s_aliases; /* alias list */ int s_port; /* port number, network byteorder */ char *s_proto; /* protocol to use */ };

  10. getaddrinfo • IPv6 versio DNS hauista • Sisältää nimi-osoite ja palvelu-portti -muunnokset #include <netdb.h> int getaddrinfo(const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result); Paluuarvo: 0 - OK, muut virhe Esimerkki funktion palautuksesta: Figure 11.5

  11. Struct addrinfo struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* AF_xxx */ int ai_socktype; /* SOCK_xxx */ int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ socklen_t ai_addrlen; /* length of ai_addr */ char *ai_canonname; /* ptr to canonical name for the host */ struct sockaddr *ai_addr; /* ptr to socket address structure */ struct addrinfo *ai_next; /* ptr to next structure in list */ };

  12. Vihjeet • Liput • AI_PASSIVE • AI_CANONNAME • AI_NUMERICHOST • AI_NUMERICSERV • AI_V4MAPPED • AI_ALL • AI_ADDRCONFIG

  13. Vihjeet • Perhe • AF_INET, AF_INET6, AF_UNSPEC • Sokettityyppi • 0, SOCK_DGRAM, SOCK_STREAM, SOCK_SEQPACKET • Protokolla • 0, IPPROTO_TCP, IPPROTO_UDP

  14. gai_strerror • Tulostaa getaddrinfo:n virheen #include <netdb.h> const char *gai_strerror(int error);

  15. freeaddrinfo • Hoitaa muistin vapauttamisen #include <netdb.h> void freeaddrinfo(struct addrinfo *ai); • Käy läpi linkitetyn listan, vapauttaen muistin

  16. getnameinfo • Vastakohta getaddrinfo:lle • Etsii osoitetta vastaavan nimen #include <netdb.h> int getnameinfo(const struct sockaddr *sockaddr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen); • Pituuden (hostlen, servlen) avulla määrätään mitä halutaan • Käyttäjän pitää varata muisti

  17. re-entrant • gethostbyname ja gethostbyaddr -funktiot käyttävät staattista muuttujaa sockaddr:n tallentamiseen • Ongelmia säikeiden kanssa • gethostbyname_r • gethostbyaddr_r • Käyttäjän pitää varata muistiä • Käytännössä pitää varata maksimi

  18. Hylättyjä IPv6 funktioita • gethostbyname2 • Toimii samaan tapaan kuin gethostbyname jos AF on IPv4 • getipnodebyname & freehostent • Korvattu getaddrinfo funktiolla • Varasi dynaamisesti muistin hostent-rakenteelle

  19. Yhteenveto • gethostbyname ja gethostbyaddr olivat ensimmäisiä tähän tarkoitukseen käytettyjä funktioita • getaddrinfo ja getnameinfo ovat IPv6:n myötä tulleet uudet vastineet • getservbyname funktiota käytetään palvelun nimen ja porttien kanssa toimimiseen • Tämän tarjoamat tiedot pohjautuvat yleensä tekstitiedostoon • Esitettyjen tapojen lisäksi on olemassa res_ -alkuisia funktioita

More Related