Что такое доменное имя? Что такое система доменных имен?
Давайте сначала заглянем в энциклопедию Baidu.доменное имяидоменное имя系统给出изобъяснятьизодинчастьсодержание:
Доменное имя (англ. Domain Name, сокращенно: Domain), именуемое доменным именем или доменом, — это имя компьютера или группы компьютеров в сети Интернет, состоящее из строки символов, разделенных точками. Оно используется для идентификации во время работы. передача данных. Электронное ориентирование компьютеров. Поскольку IP-адреса неудобно запоминать и они не могут отображать имя и характер организации адресов, люди разработали доменные имена и сопоставили доменные имена и IP-адреса друг с другом через систему доменных имен (DNS), чтобы сделать доступ людей более удобным. Интернет без необходимости запоминать строку IP-адресов, которые могут быть прочитаны непосредственно машиной. Система доменных имен (англ. Domain Name System, сокращение: DNS) — услуга Интернета. Будучи распределенной базой данных, которая сопоставляет доменные имена и IP-адреса друг с другом, она может сделать доступ людей к Интернету более удобным. DNS использует UDP-порт 53. В настоящее время ограничение на длину каждого уровня доменного имени составляет 63 символа, а общая длина доменного имени не может превышать 253 символа.
Это можно понять так: доменные имена могут облегчить запоминание каждому, а цель DNS — реализовать преобразование между доменными именами и адресами хостов.
В некоторых случаях доменное имя не только облегчает запоминание, но и помечается сервером. Например, a.example.com и b.example.com могут быть разными страницами одного и того же IP-адреса и помечены значком. веб-сервера. В настоящее время прямой доступ к IP-адресу может не соответствовать ожиданиям, поэтому я думаю, что мы не можем просто сказать, что для доступа вместо IP-адреса используется имя домена.
Прежде чем задуматься о том, как выполнить эту часть, я обратился к некоторым другим статьям в сообществе Tencent Cloud и обнаружил некоторые проблемы (насколько я понимаю, это также может быть проблемой), в том числе сертифицированные Tencent.Команда фронтенда IMWebСтатьи в этой области,Статьи от команды«ДНС-анализ»верно DNS Был объяснен весь процесс анализа. Здесь я просто опишу процесс анализа посредством анализа этой статьи.
Кратко опишите процесс разрешения доменных имен в статье:
Прежде всего, кеширование браузера не является большой проблемой. Каждый браузер имеет свой собственный механизм кеширования.
Второе — это системный кеш. Действительно, система будет. TTL Кеширование результатов разрешения доменных имен, но как сказано в статье hosts Файл как кеш неверен в Windows В операционной системе он состоит из DnsClient Служба отвечает за реализацию, в Linux Система питается от NSCD Реализован сервис классов.
Третий кэш роутера, в этом я сомневаюсь (извините, возможно у меня роутер слишком слабый), хотя по идее роутер действительно можно взломать DNS-запросруководитьанализироватькэшивозвращаться,Но так ли это на самом деле, требует дальнейшего обсуждения.。
Окончательный поиск DNS-кеша интернет-провайдера и рекурсивный поиск еще более сомнительны. Прежде всего, установленный мной адрес разрешения DNS не обязательно является адресом, предоставленным интернет-провайдером. Я могу выбрать какой-либо общедоступный DNS, который предоставляется такими компаниями, как. Google, Microsoft и Tencent. Общедоступное разрешение DNS, и не все DNS-серверы используют рекурсивные запросы, также распространены методы итеративного запроса.
На этом анализ этой статьи заканчивается, и я хотел бы усомниться в строгости статьи команды.
Здесь я должен еще раз упомянуть метод итеративного запроса и метод рекурсивного запроса DNS. Реальный сценарий может быть более сложным и даже может быть смесью различных методов. Вот следующее простое и свободное выражение:
В методе итеративного разрешения клиент последовательно обращается к различным уровням серверов разрешения доменных имен для запроса.
Рекурсивный запрос, завершенный сервером, возвращается непосредственно клиенту (клиент только отправляет запрос анализа. Прямо сейчас можно завершить анализ).
В облаке Tencent DNS анализироватьизЧасто задаваемые вопросыПодробности есть в документациииззаявление,Прямая цитата здесь:
Чтобы указать хостинг-провайдера IP Адрес, выберите тип A Чтобы указать доменное имя, выберите тип; CNAME。 A Записывать:адрес Записывать,используется для указаниядоменное имяиз IPv4 адрес (напр. 8.8.8.8), если вам нужно указать доменное имя на IP адрес (адрес внешней сети), необходимо добавить A Записывать. CNAME Записывать: Если вам нужно указать доменное имя на другое доменное имя, укажите другое доменное имя. IP адрес, вам нужно добавить CNAME Записывать. NS Записывать:доменное имя сервера запись, при необходимости доменное имясдавать Чтоон DNS Для анализа поставщика услуг необходимо добавить NS Записывать. AAAA Записывать:используется для указания Хозяинимя(илидоменное имя), соответствующее IPv6 адрес (напр. ff06:0:0:0:0:0:0:c3)Записывать. MX Записывать:Если вам нужно настроить электронную почту,Пусть почтовый ящик получает почту,Просто нужно добавить MX Записывать. TXT Записывать:если хотитевернодоменное имяруководитьлоготипииллюстрировать, киспользовать TXT рекорды, большинство TXT записи используются для создания SPF Логгирование (антиспам). SRV Записывать:SRV Записи используются для идентификации того, что определенный сервер использует определенную службу, и обычно используются при управлении каталогами систем Microsoft. Формат записи хоста: имя службы.Тип протокола. Например _sip._tcp 。 неявный, явный URL Записывать:будетдоменное имя указывает на другой существующий сайт, необходимо добавить URL Записывать.
Другие и конкретные пояснения см. в следующем разделе.
О ТТЛ:
TTL означает Time To Live, время выживания кэша. Относится к времени, в течение которого локальный DNS кэширует информацию о записи вашего доменного имени. По истечении срока действия кэша значение записи будет снова получено из DNSPod. Чаще всего используются наши 600 секунд по умолчанию.
Что такое Так DNS-запрос?
Основной ссылкой является RFC 1034 Domain names - concepts and facilities и RFC 1035 Domain names - implementation and specification, RFC 1035 Есть подробнее, 1034 Более лаконично.
В этом разделе обсуждаются только две вышеуказанные спецификации, остальные DNS Развернуть (например, RFC 6891、1183、1706、2536、2539 ждать)Нормативныйсуществовать Долженчастьизанализироватьв пределах досягаемости,Вы можете узнать больше об этом позже,Содержание для в Примере будет кратко упомянуто без дальнейшего обсуждения.
тип | ценить | значение |
---|---|---|
A | 1 | адрес хоста |
NS | 2 | НС-сервер |
MD | 3 | Назначение почты (устарело – используйте MX) |
MF | 4 | Переадресация почты (устарела — используйте MX) |
CNAME | 5 | Псевдоним |
SOA | 6 | Флаг начала области аутентификации |
MB | 7 | Доменное имя электронной почты (экспериментальное) |
MG | 8 | Члены почтовой группы (экспериментально) |
MR | 9 | Переименование домена электронной почты (экспериментальное) |
NULL | 10 | Пустой RR (экспериментальный) |
WKS | 11 | Описание услуги |
PTR | 12 | Указатель доменного имени |
HINFO | 13 | Информация о хосте |
MINFO | 14 | Информация об электронной почте или списке рассылки |
MX | 15 | обмен почтой |
Содержит: заголовок, вопрос, ответ, полномочия и дополнительные части. В процессе передачи заголовок запроса должен существовать. Заголовок запроса указывает, включены ли другие части в состав содержимого.
Все числа представляют собой 16-битные целые числа без знака.
Код ответа:
ценить | отвечать |
---|---|
0 | Нет ошибок |
1 | Неверный формат, сервер не может интерпретировать запрос |
2 | Сбой сервера |
3 | Ошибка имени: доменное имя, указанное в авторитетном запросе NS, не существует. |
4 | Не реализовано,Не поддерживаетсяиз Запростип |
5 | Отклонить запрос |
6-15 | бронировать |
Имя запроса: нажмите .
Отделите доменное имя и запишите длину каждой части в качестве разделителя перед частью, чтобы 0 конец, дополнение не требуется
нравиться: cloud.tencent.com разделен на cloud tencent com Три части, длина которых равна 5,7,3, последний запрос называется: \x05cloud\x07tencent\x03com
добрый:
тип | ценить | иллюстрировать |
---|---|---|
IN | 1 | the Internet |
CS | 2 | класс CSNET (устаревший) |
CH | 3 | the CHAOS class |
HS | 4 | Hesiod |
Повторяющиеся доменные имена можно сжать в дополнительном поле (RDDATA). Формат:
потому что Соглашениено Записыватьне более чем 63 символ, поэтому его можно использовать как указатель, первый после начала запроса коробки x байты, начинающиеся с 0 Конечный контент.
Это трудно понять, просто взглянув на структуру наших примеров. Внутренний процесс DNS-запроса по-прежнему представляет собой попытку шаг за шагом заблокировать запрос.
здесь с Tencent Публичный DNS 119.29.29.29
как DНС-сервер,проситьанализировать im.qq.com
、web.tdh6.top
Взяв в качестве примера два доменных имени, используйте Python 3.10
Поддержка программирования с использованием socket библиотеку, чтобы сделать запрос.
Сначала уточните, что вам нужно руководить Запрошеноосновной формат,Header и Question Это необходимо, ответьте Непредсказуемо и не нужно быть в запросе Содержится в запросе, Орган и Additional Содержание также указывать не нужно.
Постройте на основе того, что содержит заголовок запроса:
request_data = b"" # инициализация
request_data += b"\0\1" # ID, просить логотип, можно установить по желанию
request_data += b"\1\0" # Flags,(00000001 00000000B,RD = 1,Чтоон = 0), запрос, стандартный запрос, без усечения сообщений, просить рекурсию
request_data += b"\0\1" # Question считать
request_data += b"\0\0" # Answer считать
request_data += b"\0\0" # Authority считать
request_data += b"\0\0" # Additional считать
Помимо заголовков запросов, только 1 полоска запрос запроса。
запрос В этом примере запрос состоит из трех частей: имя запроса, тип запроса, добрый запрос, тип запроса. 1 A Записывать
,Запросдобрыйдля1 the Internet 。
Доменные имена, которые необходимо запросить, необходимо обработать заранее:
fdm = "im.qq.com".split(".") # к . отдельныйдоменное имя
dm = b""
for i in fdm: # Создать запросимя dm += bytes([len(i)])
dm += i.encode()
dm += b"\0" # к 0 окончание
Обработанное доменное имя:
b'\x02im\x02qq\x03com\x00'
структуразапрос запроса:
request_data += dm # доменное имя
request_data += b"\0\1" # Рекорд
request_data += b"\0\1" # Запросдобрый,1,IN,the Internet
На этом этапе запрос создан, и его полное содержимое выглядит следующим образом:
b'\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x02im\x02qq\x03com\x00\x00\x01\x00\x01'
URL-адрес Base 64, кодирующий запрос, приводит к
b'AAEBAAABAAAAAAAAAmltAnFxA2NvbQAAAQAB'
Примечание:Хотя нет Base 64 Закодированный запрос будет использован позже.
проходить Socket Создание библиотеки UDP соединять,Отправить запросите контент и получите возврат
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # udp
s.connect(("119.29.29.29", 53))
s.send(request_data)
raw_res = s.recv(1024)
res = raw_res
Получен запрос:
b'\x00\x01\x81\x80\x00\x01\x00\x01\x00\x00\x00\x00\x02im\x02qq\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00<\x00\x04\xa3\xb1\\\x12'
Анализируйте и обрабатывайте полученные данные для получения необходимого контента, который можно будет использовать напрямую. DnsPython Библиотека, но здесь с Простойизспособанализировать。
Длина заголовка ответа фиксирована (12 байт). Извлеките заголовок ответа и прочитайте содержимое.
head = raw_res[:12]
# \x00\x01\x81\x80\x00\x01\x00\x01\x00\x00\x00\x00
rid = head[:2] # 00 01
Flags = head[2:4] # 10000001 10000000 QR = RD = RA = 1,Чтоон = 0
QCount = голова[4:6] # 00 01
RCount = голова[6:8] # 00 01
ACount = голова[8:10] # 00 00
AddCount = голова[10:12] # 00 00
Rcode для 0,показыватьпроситьуспех,Нет ошибокпроизводить,Соответствующий контент включает в себя Запросчастьи Ответ)часть.
Оставшийся контент просить после удаления заголовка ответа начинается с для Question Содержимое запроса, структура указана выше, NAME – содержание длины стороны, при этом 0
В конце следующий типидбрий имеет фиксированную длину, поэтому kk 0 Разделители битов можно извлечь RNAME, а затем извлеченный Question часть.
Запросчастьиотправлятьизсодержание完全один致,Больше не надо руководить шоу,удаляется после извлечения Запросчастьсодержание
res = res[res.index(b'\00') + 4:]
Извлечение контента на основе структуры ответа
res_name = res[:res.index(b'\00')] # Извлечь RNAME
res = res[res.index(b'\00'):]
while res.startswith(b"\x00\x00"): # Хотя никаких добавок не требуется 0, но несколько ДНС-сервер по-прежнему будет доделываться руководить, здесь речь идет о руководить
res = res[1:]
# \x00\x01\x00\x01\x00\x00\x00<\x00\x04\xa3\xb1\\\x12
res_type = res[:2] # тип 00 01,A Записывать
res_class = res[2:4] # добрый 1 IN, the Internet
res_ttl = res[4:8] # TTL,60
res_rdlen = res[8:10] # Дополнительная длина поля 4
res_rdlen = (res_rdlen[0] * 16 * 16 + res_rdlen[1]) # Простая обработка извлечения чисел длиныоценить
res_rddata = res[10:10 + res_rdlen] # Дополнительные поля \xa3\xb1\\\x12
для A Записывать,Что Дополнительные полядляанализироватьиз IP, побитовое преобразование в целое число и использование . Подключитесь, чтобы получить результаты анализа
for j in res_rddata:
ans.append(str(j))
print(".".join(ans), end="\t(A)\n")
163.177.92.18 (A)
Длина оставшегося просить после обработки равна 0.
Анализ запроса на изменение web.tdh6.top
Не этот A записано, но с CNAME Записанные доменные имена для сравнения:
b'\x00\x01\x81\x80\x00\x01\x00\x04\x00\x00\x00\x00\x03web\x04tdh6\x03top\x00\x00\x01\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x02X\x00\x1c\x03web\x04tdh6\x03top\x03cdn\x05dnsv1\x03com\x00\xc0*\x00\x05\x00\x01\x00\x00\x02X\x00\x1f\x084kzi99cn\x06slt-dk\x05sched\x06tdnsv8\xc0A\xc0R\x00\x01\x00\x01\x00\x00\x00<\x00\x04v\xb4<\x14\xc0R\x00\x01\x00\x01\x00\x00\x00<\x00\x04\xb7Bg\x92'
Что RCOUNT
ценитьдля 4
,показыватьиметь 4 полоска соответствующей нагрузки, удалите заголовок ответа согласно приведенному выше содержимому и Question Анализ после части:
Поскольку в дополнительном поле появляется содержимое, начинающееся с 0xc0, это указывает на то, что используется метод сжатия. Для выполнения сжатия необходимо найти содержимое, на которое указывает указатель. При этом, учитывая, что могут появиться многослойные указатели. в крайнем случае для анализа используется вложенная функция:
def decom(datas, raw_res) -> bytes:
s = b""
datas = datas.split(b"\00")[0]
while len(datas) > 0:
tlen = datas[0]
if tlen & 0xc0 == 0xc0:
offset = (datas[0] * 16 * 16 + datas[1]) & 0x3fff # Читать смещениеценить
d = decom(raw_res[offset:], raw_res) # Вложенный поиск
s += d
datas = datas[2:]
pass
else:
s += datas[1:1 + datas[0]] + b"."
datas = datas[1 + datas[0]:]
if s.endswith(b"."):
s = s[:-1]
return s
Ответ на:
web.tdh6.top.cdn.dnsv1.com (CNAME)
4kzi99cn.slt-dk.sched.tdnsv8.com (CNAME)
118.183.8.76 (A)
183.66.103.146 (A)
Здесь есть два IP-адреса, соответствующие одному и тому же доменному имени. Это нетрудно узнать, проанализировав часть ответа RNAME.
Вышеуказанный контент найти несложно, традиционный DNS Запрос и ответ проводятся UDP или TCP Отправляется без шифрования, поэтому существует риск слежки и взлома, HTTPS. какиспользовать TLS Часто используемые протоколы передачи, передача «использовать что» DNS-запросда DNS Queries over HTTPS,В настоящее время браузеры Tinder и Google уже поддерживают эту функцию.,Давайте сначала покажем простой анализ Пример для Чторуководить.
Запрос был сделан в предыдущем Base 64 Кодирование, проведение Кодировкой можно руководить DOH просить.
Тенсент ОблакообщественныйанализироватьужеПоддержка DoH прекращена.,но МожеткиспользоватьобщественныйанализироватьФункция найдена DoH адрес или публичный адрес DNS
к IBM общественный DNS 9.9.9.9 дляпример,проходитьпросить https://9.9.9.9/dns-query?dns={Base 64 закодированный DNS-запрос}
Прямо сейчас Можетруководить DOH просить, например анализироватьдля в приведенном выше примере:
https://9.9.9.9/dns-query?dns=AAEBAAABAAAAAAAAAmltAnFxA2NvbQAAAQAB
Возвращенное содержимое k возвращается в двоичной форме, содержимое для DNS анализироватьизрезультат,Тот же способ, что и проведение доступен для Чторуководитьанализировать,Быстрая реализация:
import requests
import base64
import socket # импортировать socket модуль
import dns.message
dd = b""
for i in "im.qq.com".split("."):
dd += bytes([len(i)])
dd += i.encode()
dd += b"\0"
request_data = b""
# проситьголова
request_data += b"\0\1"
request_data += b"\1\0"
request_data += b"\0\1" # Question считать
request_data += b"\0\0" # Answer считать
request_data += b"\0\0"
request_data += b"\0\0"
# Question
request_data += dd # доменное имя
request_data += b"\0\1" # Рекорд
request_data += b"\0\1" # IN
r = requests.get("https://9.9.9.9/dns-query", params={"dns": base64.urlsafe_b64encode(request_data).replace(b"=", b"")})
raw_res = r.content
d = dns.message.from_wire(raw_res)
print(d.answer[0])
Результат выполнения:
im.qq.com. 600 IN A 203.205.254.62
DNS Queries over HTTPS,проходить HTTPS выполнять DNS Трансмиссия, на момент написания, рекомендованная спецификация для RFC8484 DNS Queries over HTTPS (DoH),Что Текущее общее количество предыдущих жизней 14 версии, текущая версия такая же, как 2018 Год 10 Месяц представления, 2019 г. Год 1 Месяц последнего изменения.
DNS Over HTTPS это использование TLS защищенный HTTP стандарт передачи Процесс разрешения DNS, в спецификации указано, что для передачи требуется использовать HTTP/2способпередача инфекции,Чтопередача инфекции Можетиспользовать HTTP Сжатие, аутентификация, кэширование, перенаправление, прокси-сервер и другие функции предоставляются каждый раз. DNS-запрос соответствует независимому HTTP просить. В процессе анализа, стандарт. DNS-запросруководить Base 64 url компилироватькод(RFC4648)проходить GET или POST способ DoH Сервер делает запрос (DoH Сервер должен поддерживать оба GET и POST метод), используйте POST При запросе также необходимо указать это в заголовке запроса. Content-Type,DoH Запрошено Mime для application/dns-message
。
DNS over TLS раньше, чем DoH использовать, рекомендуемые на данный момент характеристики для RFC 7858 и RFC 8310,DoT предлагается для Транспортный уровень Безопасность, характер DNS-запроса, указанный в спецификации по умолчанию. DoT использоватьпортдля 853 TCP Соединение руководит передачей данных, что не позволяет передавать данные в открытом виде, требуетиспользовать TLS Шифрованная связь. сервери Не должно быть немедленных «Прямо» между клиентами каждый раз, когда просить сейчас отключен, чтобронировать должно быть доступно в течение определенного периода времени для следующего запроса; использовать, пока ресурсов достаточно, его следует сохранить TCP Долго подключаться и просить подписаться RFC7766 DNS Transport over TCP - Implementation Requirements Лучшие практики, представленные в разделе «Предотвратить истощение ресурсов и атаки типа «отказ в обслуживании».
существоватьпроходить TCP способ В процессе DNS-запроса длину тела просить необходимо размещать в начале данных, Dns over TLS Есть и такие же требования.
import ssl
import socket
import dns.message
domname = "im.qq.com"
server = "9.9.9.9"
# Создать запрос
request_data = dns.message.make_query(domname, "A").to_wire()
# Рассчитать длину
msg_len = len(request_data)
msg_head = bytes([msg_len])
if len(msg_head) == 1:
msg_head = b"\0" + msg_head
request_data = msg_head + request_data
# Учреждать SSL соединять
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = False
context.load_default_certs()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss = context.wrap_socket(s)
ss.connect((server, 853))
# Отправить запрос
ss.send(request_data)
raw_res = ss.recv(1024)[2:] # Длина возвращаемых данных здесь временно игнорируется.
# анализироватьданные
d = dns.message.from_wire(raw_res)
print(d.answer[0])
# закрытиепросить
ss.close()
проходитьконтроль DNS анализировать результаты, можно очень хорошо, направленная блокировка определенного домена имя, для сетевой среды предоставляется гарантия.
2022 Год 12 Tencent спустя несколько месяцев Публичный анализ пар за месяц 300 Запросы, оплачиваемые за 10 000 раз, рассчитываются за 100 миллионов запросов. 250 Взимается плата в юанях (может быть изменена в любое время, обратите внимание на официальную документацию) каждый раз. DoH и DoT просить = 8 Количество раз выставления счетов.
Используйте облако Tencent общественныйанализировать Услуги можно легко получитьиспользовать DNS Блокировка контента при поддержке Что DoH,для сетевой безопасности обеспечивает дополнительную защиту,Что имеет множество встроенных шаблонов экранирования, которые можно легко использовать.
Черный список предоставлен Что、белыйимяодна функция Можеткруководить Персонализированная конфигурация。Также доступенанализировать Записывать、Функция различения устройства,Он может удовлетворить потребности анализа в большинстве ситуаций.