【Разрешение DNS】Анализ процесса разрешения DNS
【Разрешение DNS】Анализ процесса разрешения DNS

Система доменных имен (DNS)

введение

Что такое доменное имя? Что такое система доменных имен?

Давайте сначала заглянем в энциклопедию 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-адреса используется имя домена.

Процесс разрешения DNS

Прежде чем задуматься о том, как выполнить эту часть, я обратился к некоторым другим статьям в сообществе Tencent Cloud и обнаружил некоторые проблемы (насколько я понимаю, это также может быть проблемой), в том числе сертифицированные Tencent.Команда фронтенда IMWebСтатьи в этой области,Статьи от команды«ДНС-анализ»верно DNS Был объяснен весь процесс анализа. Здесь я просто опишу процесс анализа посредством анализа этой статьи.

Скриншот статьи
Скриншот статьи

Кратко опишите процесс разрешения доменных имен в статье:

  1. Найти кеш браузера
  2. Найти системный кеш
  3. Найти кеш роутера
  4. Найти кеш DNS провайдера
  5. Рекурсивный поиск

Прежде всего, кеширование браузера не является большой проблемой. Каждый браузер имеет свой собственный механизм кеширования.

Второе — это системный кеш. Действительно, система будет. TTL Кеширование результатов разрешения доменных имен, но как сказано в статье hosts Файл как кеш неверен в Windows В операционной системе он состоит из DnsClient Служба отвечает за реализацию, в Linux Система питается от NSCD Реализован сервис классов.

Третий кэш роутера, в этом я сомневаюсь (извините, возможно у меня роутер слишком слабый), хотя по идее роутер действительно можно взломать DNS-запросруководитьанализироватькэшивозвращаться,Но так ли это на самом деле, требует дальнейшего обсуждения.。

Окончательный поиск DNS-кеша интернет-провайдера и рекурсивный поиск еще более сомнительны. Прежде всего, установленный мной адрес разрешения DNS не обязательно является адресом, предоставленным интернет-провайдером. Я могу выбрать какой-либо общедоступный DNS, который предоставляется такими компаниями, как. Google, Microsoft и Tencent. Общедоступное разрешение DNS, и не все DNS-серверы используют рекурсивные запросы, также распространены методы итеративного запроса.

На этом анализ этой статьи заканчивается, и я хотел бы усомниться в строгости статьи команды.

Здесь я должен еще раз упомянуть метод итеративного запроса и метод рекурсивного запроса DNS. Реальный сценарий может быть более сложным и даже может быть смесью различных методов. Вот следующее простое и свободное выражение:

В методе итеративного разрешения клиент последовательно обращается к различным уровням серверов разрешения доменных имен для запроса.

Рекурсивный запрос, завершенный сервером, возвращается непосредственно клиенту (клиент только отправляет запрос анализа. Прямо сейчас можно завершить анализ).

Записи хоста и TTL

В облаке 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-запрос

Что такое Так 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 ждать)Нормативныйсуществовать Долженчастьизанализироватьв пределах досягаемости,Вы можете узнать больше об этом позже,Содержание для в Примере будет кратко упомянуто без дальнейшего обсуждения.

Соглашение

  • Передача данных 8 Байты, состоящие из битов, делятся на руководить, причем в каждой единице находится левый старший бит, например: 1 0 1 0 1 0 1 0 Представляет десятичное число 170
  • Не чувствителен к регистру, но четность должна точно совпадать
ТИП(тип)

тип

ценить

значение

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

обмен почтой

основной формат

основной формат
основной формат

Содержит: заголовок, вопрос, ответ, полномочия и дополнительные части. В процессе передачи заголовок запроса должен существовать. Заголовок запроса указывает, включены ли другие части в состав содержимого.

Формат заголовка запроса

Формат заголовка запроса
Формат заголовка запроса
  • ID логотип
  • QR 0: запрос 1: Ответ
  • Opcode 0: Стандартный запрос 1: Обратный запрос 2:состояниепросить 3-15:бронировать
  • AA: авторизованный ответ
  • TC Усечение сообщения
  • RD лируководитьрекурсияпросить
  • RA Поддерживать ли рекурсию
  • Z бронировать
  • RCODE отвечатькод
  • QDCOUNT Количество полосок ячеек в части просить.
  • ANCOUNT Количество записей ресурсов в ответной части.
  • NSCOUNT Количество записей ресурсов сервера имен в разделе аутентификации.
  • ARCOUNT Количество записей ресурсов в разделе дополнительных записей.

Все числа представляют собой 16-битные целые числа без знака.

Код ответа:

ценить

отвечать

0

Нет ошибок

1

Неверный формат, сервер не может интерпретировать запрос

2

Сбой сервера

3

Ошибка имени: доменное имя, указанное в авторитетном запросе NS, не существует.

4

Не реализовано,Не поддерживаетсяиз Запростип

5

Отклонить запрос

6-15

бронировать

Формат данных запроса запроса

Запрос Формат данных
Запрос Формат данных
  • QNAME проситьимя
  • QTYPE Запростип
  • QCKASS Класс запроса, например IN

Имя запроса: нажмите . Отделите доменное имя и запишите длину каждой части в качестве разделителя перед частью, чтобы 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

Ответ, аутентификация, дополнительный формат данных

формат ответа
формат ответа
  • NAME имя
  • TYPE тип
  • CLASS добрый
  • TTL время выживания
  • RDLENGTH Дополнительная длина данных (байты)
  • RDDATA Дополнительные данные

Сжатие данных

Повторяющиеся доменные имена можно сжать в дополнительном поле (RDDATA). Формат:

сжатый указатель
сжатый указатель

потому что Соглашениено Записыватьне более чем 63 символ, поэтому его можно использовать как указатель, первый после начала запроса коробки x байты, начинающиеся с 0 Конечный контент.

DNS-запрос Пример

Это трудно понять, просто взглянув на структуру наших примеров. Внутренний процесс DNS-запроса по-прежнему представляет собой попытку шаг за шагом заблокировать запрос.

здесь с Tencent Публичный DNS 119.29.29.29 как DНС-сервер,проситьанализировать im.qq.comweb.tdh6.top Взяв в качестве примера два доменных имени, используйте Python 3.10 Поддержка программирования с использованием socket библиотеку, чтобы сделать запрос.

Создать запрос

Сначала уточните, что вам нужно руководить Запрошеноосновной формат,Header и Question Это необходимо, ответьте Непредсказуемо и не нужно быть в запросе Содержится в запросе, Орган и Additional Содержание также указывать не нужно.

Заголовок запроса запроса

Постройте на основе того, что содержит заголовок запроса:

Язык кода:python
кодКоличество запусков:0
копировать
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 。

Доменные имена, которые необходимо запросить, необходимо обработать заранее:

Язык кода:python
кодКоличество запусков:0
копировать
fdm = "im.qq.com".split(".")  # к . отдельныйдоменное имя
dm = b""
for i in fdm: # Создать запросимя    dm += bytes([len(i)])
    dm += i.encode()
dm += b"\0"  # к 0 окончание

Обработанное доменное имя:

Язык кода:txt
копировать
b'\x02im\x02qq\x03com\x00'

структуразапрос запроса:

Язык кода:python
кодКоличество запусков:0
копировать
request_data += dm  # доменное имя
request_data += b"\0\1"  # Рекорд
request_data += b"\0\1"  # Запросдобрый,1,IN,the Internet

На этом этапе запрос создан, и его полное содержимое выглядит следующим образом:

Язык кода:txt
копировать
b'\x00\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x02im\x02qq\x03com\x00\x00\x01\x00\x01'

URL-адрес Base 64, кодирующий запрос, приводит к

Язык кода:txt
копировать
b'AAEBAAABAAAAAAAAAmltAnFxA2NvbQAAAQAB'

Примечание:Хотя нет Base 64 Закодированный запрос будет использован позже.

Отправить запрос

проходить Socket Создание библиотеки UDP соединять,Отправить запросите контент и получите возврат

Язык кода:python
кодКоличество запусков:0
копировать
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

Получен запрос:

Язык кода:txt
копировать
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 байт). Извлеките заголовок ответа и прочитайте содержимое.

Язык кода:python
кодКоличество запусков:0
копировать
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 часть.

Запросчастьиотправлятьизсодержание完全один致,Больше не надо руководить шоу,удаляется после извлечения Запросчастьсодержание

Язык кода:txt
копировать
res = res[res.index(b'\00') + 4:]
Ответ (часть ответа)

Извлечение контента на основе структуры ответа

Язык кода:python
кодКоличество запусков:0
копировать
    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, побитовое преобразование в целое число и использование . Подключитесь, чтобы получить результаты анализа

Язык кода:python
кодКоличество запусков:0
копировать
        for j in res_rddata:
            ans.append(str(j))
        print(".".join(ans), end="\t(A)\n")
Язык кода:txt
копировать
163.177.92.18	(A)

Длина оставшегося просить после обработки равна 0.

Анализ запроса на изменение web.tdh6.top Не этот A записано, но с CNAME Записанные доменные имена для сравнения:

Язык кода:txt
копировать
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, это указывает на то, что используется метод сжатия. Для выполнения сжатия необходимо найти содержимое, на которое указывает указатель. При этом, учитывая, что могут появиться многослойные указатели. в крайнем случае для анализа используется вложенная функция:

Язык кода:python
кодКоличество запусков:0
копировать
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

Ответ на:

Язык кода:text
копировать
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 Queries over HTTPS (DoH)

Безопасный DNS

Вышеуказанный контент найти несложно, традиционный DNS Запрос и ответ проводятся UDP или TCP Отправляется без шифрования, поэтому существует риск слежки и взлома, HTTPS. какиспользовать TLS Часто используемые протоколы передачи, передача «использовать что» DNS-запросда DNS Queries over HTTPS,В настоящее время браузеры Tinder и Google уже поддерживают эту функцию.,Давайте сначала покажем простой анализ Пример для Чторуководить.

Настройки Google Chrome Безопасный DNS
Настройки Google Chrome Безопасный DNS

Сделать запрос в DoH

Запрос был сделан в предыдущем 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 анализироватьизрезультат,Тот же способ, что и проведение доступен для Чторуководитьанализировать,Быстрая реализация:

Язык кода:python
кодКоличество запусков:0
копировать
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])

Результат выполнения:

Язык кода:txt
копировать
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

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 Есть и такие же требования.

экземпляр DoT

Язык кода:python
кодКоличество запусков:0
копировать
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

проходитьконтроль DNS анализировать результаты, можно очень хорошо, направленная блокировка определенного домена имя, для сетевой среды предоставляется гарантия.

2022 Год 12 Tencent спустя несколько месяцев Публичный анализ пар за месяц 300 Запросы, оплачиваемые за 10 000 раз, рассчитываются за 100 миллионов запросов. 250 Взимается плата в юанях (может быть изменена в любое время, обратите внимание на официальную документацию) каждый раз. DoH и DoT просить = 8 Количество раз выставления счетов.

Используйте облако Tencent общественныйанализировать Услуги можно легко получитьиспользовать DNS Блокировка контента при поддержке Что DoH,для сетевой безопасности обеспечивает дополнительную защиту,Что имеет множество встроенных шаблонов экранирования, которые можно легко использовать.

общественныйанализировать Шаблон блока
общественныйанализировать Шаблон блока

Черный список предоставлен Что、белыйимяодна функция Можеткруководить Персонализированная конфигурация。Также доступенанализировать Записывать、Функция различения устройства,Он может удовлетворить потребности анализа в большинстве ситуаций.

boy illustration
.NET Как загрузить файлы через HttpWebRequest
boy illustration
[Веселый проект Docker] Обновленная версия 2023 года! Создайте эксклюзивный инструмент управления паролями за 10 минут — Vaultwarden
boy illustration
Высокопроизводительная библиотека бревен Golang zap + компонент для резки бревен лесоруба подробное объяснение
boy illustration
Концепция и использование Springboot ConstraintValidator
boy illustration
Новые функции Go 1.23: точная настройка основных библиотек, таких как срезы и синхронизация, значительно улучшающая процесс разработки.
boy illustration
[Весна] Введение и базовое использование AOP в Spring, SpringBoot использует AOP.
boy illustration
Чтобы начать работу с рабочим процессом Flowable, этой статьи достаточно.
boy illustration
Байтовое интервью: как решить проблему с задержкой сообщений MQ?
boy illustration
ASP.NET Core использует функциональные переключатели для управления реализацией доступа по маршрутизации.
boy illustration
[Проблема] Решение Невозможно подключиться к Redis; вложенное исключение — io.lettuce.core.RedisConnectionException.
boy illustration
От теории к практике: проектирование чистой архитектуры в проектах Go
boy illustration
Решение проблемы искажения китайских символов при чтении файлов Net Core.
boy illustration
Реализация легких независимых конвейеров с использованием Brighter
boy illustration
Как удалить и вернуть указанную пару ключ-значение из ассоциативного массива в PHP
boy illustration
Feiniu fnos использует Docker для развертывания учебного пособия по AList
boy illustration
Принципы и практика использования многопоточности в различных версиях .NET.
boy illustration
Как использовать PaddleOCRSharp в рамках .NET
boy illustration
CRUD используется уже два или три года. Как читать исходный код Spring?
boy illustration
Устраните проблему совместимости между версией Spring Boot и Gradle Java: возникла проблема при настройке корневого проекта «demo1» > Не удалось.
boy illustration
Научите вас шаг за шагом, как настроить Nginx.
boy illustration
Это руководство — все, что вам нужно для руководства по автономному развертыванию сервера для проектов Python уровня няни (рекомендуемый сборник).
boy illustration
Не удалось запустить docker.service — Подробное объяснение идеального решения ️
boy illustration
Настройка файлового сервера Samba в системе Linux Centos. Анализ NetBIOS (супер подробно)
boy illustration
Как настроить метод ssh в Git, как получить и отправить код через метод ssh
boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo