Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 88

Автор Уильям БтивСнс

ΠœΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΊΠ½ΠΈΠ³ΠΈ записСй Ρ‚ΠΈΠΏΠ° MX, Π½ΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΠΎ Π½ΠΈΡ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ.

β–  CNAME. АббрСвиатура CNAME ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «каноничСскоС имя» (canonical name). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ записи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для присвоСния ΠΈΠΌΠ΅Π½ распространСнным слуТбам, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ftp ΠΈ www. ΠŸΡ€ΠΈ использовании ΠΈΠΌΠ΅Π½ слуТб вмСсто Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ·Π»Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ слуТбы Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ·Π΅Π» становится ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ). НапримСр, для нашСго ΡƒΠ·Π»Π° linux каноничСскими ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ записи:

ftp IN CNAME linux.unpbook.com.

www IN CNAME linux.unpbook.com.

БСйчас ΠΏΡ€ΠΎΡˆΠ»ΠΎ Π΅Ρ‰Π΅ слишком ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° появлСния ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° IPv6, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΡ… соглашСний Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ администраторы для ΡƒΠ·Π»ΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΈ IPv4, ΠΈ IPv6. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ ΡƒΠ·Π»Ρƒ freebsd ΠΈ запись Ρ‚ΠΈΠΏΠ° А, ΠΈ запись Ρ‚ΠΈΠΏΠ° AAAA. Автор ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈ запись Ρ‚ΠΈΠΏΠ° А, ΠΈ запись Ρ‚ΠΈΠΏΠ° AAAA ΠΏΠΎΠ΄ каноничСским ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠ·Π»Π° (ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅) ΠΈ создаСт Ρ‚Ρ€ΠΈ записи RR. ΠŸΠ΅Ρ€Π²Π°Ρ запись RR, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ оканчиваСтся Π½Π° -4, содСрТит запись Ρ‚ΠΈΠΏΠ° А; вторая, с ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ Π½Π° -6, содСрТит запись Ρ‚ΠΈΠΏΠ° AAAA; Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΡ запись RR, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ оканчиваСтся Π½Π° -611, содСрТит запись Ρ‚ΠΈΠΏΠ° AAAA с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… физичСской подсСти (link-local, см. Π³Π»Π°Π²Ρƒ 19) адрСсом ΡƒΠ·Π»Π° (Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² цСлях ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ). ВсС записи для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ нашСго ΡƒΠ·Π»Π° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

aix-4   IN А    206.62.226.43

aix     IN А    206.62.226.43

        IN MX   5 aix.unpbook.com.

        IN MX   10 mailhost.unpbook.com.

Aix-4   IN A    192.168.42.2

aix-6   IN AAAA 3ffe:b80:1f8d:2:204:acff:fe17:bf38

aix-611 IN AAAA fe80::204:acff:fe17:bf38

Π­Ρ‚Π° запись Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ прилоТСниями, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.

РаспознаватСли ΠΈ сСрвСры ΠΈΠΌΠ΅Π½

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими сСрвСрами ΠΈΠΌΠ΅Π½ (name servers). Часто Π² качСствС сСрвСра ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° BIND (Berkeley Internet Name Domain). ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ сСрвСры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ создаСм Π² этой ΠΊΠ½ΠΈΠ³Π΅, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ с сСрвСром DNS ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ распознаватСлСм (resolver). ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ распознаватСля β€” gethostbyname ΠΈ gethostbyaddr, ΠΈ ΠΎΠ±Π΅ ΠΎΠ½ΠΈ описаны Π² этой Π³Π»Π°Π²Π΅. ΠŸΠ΅Ρ€Π²Π°Ρ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ адрСс ΡƒΠ·Π»Π° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π° вторая β€” Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

На рис. 11.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ располоТСниС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, распознаватСлСй ΠΈ сСрвСров ΠΈΠΌΠ΅Π½. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах ΠΊΠΎΠ΄ распознаватСля содСрТится Π² систСмной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈ встраиваСтся Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ создаСтся. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… систСмах имССтся Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Π΅ΠΌΠΎΠ½-Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ всС прилоТСния. БистСмная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° выполняСт ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ распознаватСля. Π’ любом случаС ΠΊΠΎΠ΄ прилоТСния Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ распознаватСля посрСдством ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‡Π°Ρ‰Π΅ всСго gethostbyname ΠΈ gethostbyaddr.

Рис. 11.1. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ располоТСниС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, распознаватСлСй ΠΈ сСрвСров ΠΈΠΌΠ΅Π½

Код распознаватСля считываСт ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, зависящих ΠΎΡ‚ систСмы, располоТСниС сСрвСров ΠΈΠΌΠ΅Π½ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. (ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ «сСрвСры ΠΈΠΌΠ΅Π½Β», употрСбляя мноТСствСнноС число, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с нСсколькими сСрвСрами ΠΈΠΌΠ΅Π½, хотя ΠΌΡ‹ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π° рисункС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр.) Π€Π°ΠΉΠ» /etc/resolv.conf ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит IP-адрСса Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… сСрвСров ΠΈΠΌΠ΅Π½.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ /etc/resolv.conf ΠΈΠΌΠ΅Π½Π°, Π° Π½Π΅ IP-адрСса сСрвСров ΠΈΠΌΠ΅Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ это Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎ Π±Ρ‹ нас ΠΊ Π²Π΅Ρ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΊΡƒΡ€ΠΈΡ†Ρ‹ ΠΈ яйца: ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ имя сСрвСра ΠΈΠΌΠ΅Π½?

Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ посылаСт запрос Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ сСрвСру ΠΈΠΌΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ UDP. Если Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр ΠΈΠΌΠ΅Π½ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сСрвСры ΠΈΠΌΠ΅Π½ Ρ‡Π΅Ρ€Π΅Π· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ UDP. Если ΠΎΡ‚Π²Π΅Ρ‚ слишком Π²Π΅Π»ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄ΠΈΠ½ UDP-ΠΏΠ°ΠΊΠ΅Ρ‚, Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° TCP.


ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ DNS

МоТно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΈ ΠΈ адрСсС Π±Π΅Π· использования DNS. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ слуТат статичСскиС Ρ„Π°ΠΉΠ»Ρ‹ со списком ΡƒΠ·Π»ΠΎΠ² (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ„Π°ΠΉΠ» /etc/hosts, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π² Ρ‚Π°Π±Π». 11.2), информационная систСма сСти (Network Information System, NIS) ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» слуТбы ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² (Lightweight Directory Access Protocol β€” LDAP). К соТалСнию, способ конфигурирования ΡƒΠ·Π»Π° для использования Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² слуТб ΠΈΠΌΠ΅Π½ зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Solaris 2.x, HP-UX 10 ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Ρ… вСрсий, Π° Ρ‚Π°ΠΊΠΆΠ΅ FreeBSD 5.x ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„Π°ΠΉΠ» /etc/nswitch.conf, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ AIX ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» /etc/netsvc.conf. BIND 9.9 прСдоставляСт свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, которая называСтся IRS (Information Retrieval Service β€” слуТба получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ Ρ„Π°ΠΉΠ» /etc/irs.conf. Если сСрвСр ΠΈΠΌΠ΅Π½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для поиска ΠΈΠΌΠ΅Π½ ΡƒΠ·Π»ΠΎΠ², всС эти систСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для задания IP-адрСсов сСрвСров ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ» /etc/resolv.conf. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, эти различия ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ скрыты ΠΎΡ‚ программиста ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, поэтому ΠΌΡ‹ просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ распознаватСля, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ gethostbyname ΠΈ gethostbyaddr.

11.3. Ѐункция gethostbyname

Π£Π·Π»Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… сСтСй ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌ, ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для чСловСчСского восприятия. Но Π²ΠΎ всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΊΠ½ΠΈΠ³ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ использовались IP-адрСса вмСсто ΠΈΠΌΠ΅Π½, поэтому ΠΌΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² структуры адрСсов сокСтов для Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ connect ΠΈ sendto, ΠΈ Ρ‡Ρ‚ΠΎ возвращаСтся функциями accept ΠΈ recvfrom. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π΅Π»ΠΎ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π° Π½Π΅ с адрСсами. Π­Ρ‚ΠΎ особСнно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° IPv6, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ адрСса IPv6 (ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ строки) Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π»ΠΈΠ½Π½Π΅Π΅ адрСсов IPv4, записанных Π² Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎ-дСсятичном прСдставлСнии. (НапримСр, запись Ρ‚ΠΈΠΏΠ° AAAA ΠΈ запись Ρ‚ΠΈΠΏΠ° PTR для ip6.arpa Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ это со всСй ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ.)

Бамая основная функция, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ поиск ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ·Π»Π°, β€” это функция gethostbyname. ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру hostent, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ всС адрСса IPv4 для ΡƒΠ·Π»Π°. Однако ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ адрСса IPv4. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 11.6 рассматриваСтся функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ адрСса IPv4 ΠΈ IPv6. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ POSIX ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция gethostbyname ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈΠ· Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ Π΅Π³ΠΎ вСрсии.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

ΠœΠ°Π»ΠΎΠ²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ gethostbyname исчСзнут Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ вСсь Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» IPv6, Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ это Π΅Ρ‰Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ скоро. Однако ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· стандарта POSIX Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. ВмСсто Π½Π΅Π΅ ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ getaddrinfo (Ρ€Π°Π·Π΄Π΅Π» 11.6).

#include <netdb.h>


struct hostent *gethostbyname(const char *hostname);

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚: нСпустой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния, -1 Π² случаС ошибки

НСпустой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру hostent:

struct hostent {

 char *h_name;        /* ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ (каноничСскоС) имя ΡƒΠ·Π»Π° */

 char **h_alihases;   /* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° псСвдонимы */

 int   h_addrtype;    /* Ρ‚ΠΈΠΏ адрСса ΡƒΠ·Π»Π°: AF_INET */

 int   h_length;      /* Π΄Π»ΠΈΠ½Π° адрСса: 4 */

 char  **h_addr_list; /* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ с адрСсами IPv4 ΠΈΠ»ΠΈ IPv6 */

};

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… DNS функция gethostbyname выполняСт запрос Π½Π° запись Ρ‚ΠΈΠΏΠ° А. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ адрСса IPv4.

На рис. 11.2 прСдставлСно устройство структуры hostent ΠΈ содСрТащаяся Π² Π½Π΅ΠΉ информация, Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ искомоС имя ΡƒΠ·Π»Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ‚Ρ€ΠΈ адрСса IPv4. ВсС ΠΈΠΌΠ΅Π½Π° ΡƒΠ·Π»Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой строки языка Π‘.

Рис. 11.2. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° hostent ΠΈ Π΅Π΅ ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ имя h_name называСтся каноничСским ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠ·Π»Π°. НапримСр, с ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ записями CNAME каноничСскоС имя ΡƒΠ·Π»Π° ftp://ftp.unpbook.com Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄ linux.unpbook.com. Π’Π°ΠΊΠΆΠ΅ Ссли ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gethostbyname с ΡƒΠ·Π»Π° aix с Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ solaris, Ρ‚ΠΎ Π² качСствС каноничСского ΠΈΠΌΠ΅Π½ΠΈ возвращаСтся ΠΏΠΎΠ»Π½ΠΎΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя (FQDN) solaris.unpbook.com..

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

НСкоторыС вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gethostbyname Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ hostname ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записан Π² Π²ΠΈΠ΄Π΅ строки дСсятичных чисСл, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ΅ hptr = gethostbyname("206.62.226.33"); Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Rlogin ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя ΡƒΠ·Π»Π°, вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gethostbyname, ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎ-Π΄Π΅ΡΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ запись [127]. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ POSIX допускаСт это, Π½ΠΎ Π½Π΅ устанавливаСт Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² качСствС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ, поэтому пСрСносимоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ.


Ѐункция gethostbyname отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сокСтов, описанных Π½Π°ΠΌΠΈ, Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Π·Π°Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno, ΠΊΠΎΠ³Π΄Π° происходит ошибка. ВмСсто этого ΠΎΠ½Π° присваиваСт глобальной цСлочислСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ h_errno ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… констант, опрСдСляСмых Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ <netdb.h>: