Вызов локального преобразователя DNS из Python не кэширует ответыLinux

Ответить
Anonymous
 Вызов локального преобразователя DNS из Python не кэширует ответы

Сообщение Anonymous »

Я учусь использовать DNS на Python, и в RFC-1034/5.1 описывается, что такое преобразователи DNS (выделено мной):

Резолверы — это программы, которые связывают пользовательские программы с серверами доменных имен
. В простейшем случае преобразователь получает запрос от
пользовательской программы (например, почтовой программы, TELNET, FTP) в виде
< strong>вызов подпрограммы, системный вызов и т. д. и возвращает нужную информацию
в форме, совместимой с форматами данных локального хоста.
Распознаватель находится на том же компьютере, что и программа,
запрашивает услуги преобразователя


Я обнаружил, что сокет::gethostname предоставляет способ разрешения адреса хоста. Поскольку RFC-1034 определяет преобразователь как программу, доступную через вызов подпрограммы, похоже, что это должен быть вызов локального преобразователя. Чтобы проверить это, я написал следующий простой код:

Код: Выделить всё

import socket

socket.gethostbyname("cloudflare.com")
socket.gethostbyname("cloudflare.com")
socket.gethostbyname("cloudflare.com")
socket.gethostbyname("cloudflare.com")
Я ожидал, что к реальному удаленному DNS-серверу будут обращаться только один раз, а на остальные три запроса будет дан ответ из кеша преобразователя. Но tcpdump показывает 4 одинаковых запроса:

Код: Выделить всё

02:14:53.652829 IP (tos 0x0, ttl 64, id 32328, offset 0, flags [DF], proto UDP (17), length 60)
192.168.10.2.47207 > 192.168.10.1.53: [udp sum ok] 12251+ A? cloudflare.com. (32)
02:14:53.660839 IP (tos 0x0, ttl 64, id 43168, offset 0, flags [none], proto UDP (17), length 92)
192.168.10.1.53 > 192.168.10.2.47207: [udp sum ok] 12251 q: A? cloudflare.com. 2/0/0 cloudflare.com. [3m6s] A 104.16.132.229, cloudflare.com. [3m6s] A 104.16.133.229 (64)
02:14:54.323157 IP (tos 0x0, ttl 64, id 28971, offset 0, flags [DF], proto UDP (17), length 60)
192.168.10.2.52870 > 192.168.10.1.53: [udp sum ok] 54989+ A? cloudflare.com. (32)
02:14:54.329389 IP (tos 0x0, ttl 64, id 1765, offset 0, flags [none], proto UDP (17), length 92)
192.168.10.1.53 > 192.168.10.2.52870: [udp sum ok] 54989 q: A? cloudflare.com. 2/0/0 cloudflare.com. [3m5s] A 104.16.132.229, cloudflare.com. [3m5s] A 104.16.133.229 (64)
02:14:54.656564 IP (tos 0x0, ttl 64, id 19244, offset 0, flags [DF], proto UDP (17), length 60)
192.168.10.2.46281 > 192.168.10.1.53: [udp sum ok] 56996+ A? cloudflare.com. (32)
02:14:54.668683 IP (tos 0x0, ttl 64, id 3859, offset 0, flags [none], proto UDP (17), length 92)
192.168.10.1.53 > 192.168.10.2.46281: [udp sum ok] 56996 q: A? cloudflare.com. 2/0/0 cloudflare.com. [3m5s] A 104.16.132.229, cloudflare.com. [3m5s] A 104.16.133.229 (64)
02:14:54.988455 IP (tos 0x0, ttl 64, id 51584, offset 0, flags [DF], proto UDP (17), length 60)
192.168.10.2.36653 > 192.168.10.1.53: [udp sum ok] 52387+ A? cloudflare.com. (32)
02:14:54.994485 IP (tos 0x0, ttl 64, id 63655, offset 0, flags [none], proto UDP (17), length 92)
192.168.10.1.53 > 192.168.10.2.36653: [udp sum ok] 52387 q: A? cloudflare.com. 2/0/0 cloudflare.com. [3m5s] A 104.16.132.229, cloudflare.com. [3m5s] A 104.16.133.229 (64)
Как видно, DNS-сервер, расположенный на маршрутизаторе, обращается все 4 раза. Почему сокет::gethostname не кэширует ответ, как того требует RFC-1034?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -responses
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»