Сценарии PowerDNS — получение уникального идентификатора DNS-запроса

Пишу lua-скрипты для PowerDNS.

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

Я перехватываю DNS-запросы с помощью функций «preresolve» и «postresolve», и у них нет уникального идентификатора, который будет символизировать текущий обрабатываемый DNS-запрос.

Я видел, что при использовании функции "ipfilter" я могу использовать функцию GetID() для получения идентификатора запроса DNS. Эта возможность отсутствует в функциях "preresolve" и "postresolve".

Любые идеи?


person Hanoch Giner    schedule 05.07.2016    source источник
comment
Да, это невозможно. Чего именно вы пытаетесь достичь? Может есть другой способ   -  person Ctx    schedule 05.07.2016
comment
Мне он нужен в основном для статистики и логов. Я хочу зафиксировать задержку, которую реализация моих функций добавляет в поток запросов. Я также хочу иметь возможность следить за конкретным запросом через журналы.   -  person Hanoch Giner    schedule 06.07.2016
comment
Без проверки можно было бы установить идентификатор в dq-объекте в preresolve-hook и прочитать его из postresolve-hook: dq.myId = "1234"   -  person Ctx    schedule 07.07.2016


Ответы (1)


После обновления с PDNS Recursor версии 3.0 до 4.0 я нашел свой ответ.

В версии 4 функции preresolve и postresolve получают объект dq (DNSQuestion), объект dq содержит два поля, которые могут помочь с идентификатором запроса.

Во-первых, вы можете использовать исходный идентификатор запроса, получив значение из

dq:getDH():getID()

Во-вторых, dq может содержать пользовательскую ссылку на объект LUA, которая сохраняется на протяжении всего времени существования объекта dq.

local data={}
data["domaindetails"]= dq.udpAnswer
dq.data=data  

Дополнительные сведения см. в их руководстве по сценариям: https://doc.powerdns.com/md/recursor/scripting/#the-dnsquestion-dq-object

person Hanoch Giner    schedule 13.11.2017