Как добавить обратную IP-запись с помощью DNSPython

Я пытаюсь добавить запись DNS с помощью DNSPython;

это хорошо работает, когда я устанавливаю DNS следующим образом:

import dns.resolver
import dns.query
import dns.reversename
import dns.update
import dns.rdatatype

update = dns.update.Update('test.com')
update.replace('a', 3600, dns.rdatatype.A, '10.10.10.10')
response = dns.query.tcp(update, '127.0.0.1')

Однако это не работает, когда я устанавливаю обратный DNS таким же образом:

update = dns.update.Update('10.in-addr.arpa')
update.replace('10.10.10.', 3600, dns.rdatatype.PTR, 'a.test.com')
response = dns.query.tcp(update, '127.0.0.1')

Я хочу знать, как успешно установить обратный DNS, спасибо~


person Karon    schedule 30.12.2015    source источник


Ответы (3)


Я нахожу проблему:

update.replace('10.10.10.', 3600, dns.rdatatype.PTR, 'a.test.com')

это должно быть так;

update.replace('10.10.10', 3600, dns.rdatatype.PTR, 'a.test.com')

Но другая проблема: этот способ обновления обратного DNS не всегда успешен, иногда, когда я использую «nslookup» для тестирования, кажется, что он не добавлен на сервер DNS;

более того, когда я nslookup ip вроде:

nslookup 10.10.10.10
Server:         127.0.0.1
Address:        127.0.0.1#53

10.10.10.10.in-addr.arpa        name =a.test.com.10.in-addr.arpa.

Это не то, что я хочу, при использовании nsupdate для добавления он показывает только:

10.10.10.10.in-addr.arpa        name =a.test.com.

Что я могу сделать, чтобы исправить это?

person Karon    schedule 30.12.2015

Сам столкнулся с этой проблемой.
Вы пропустили точку в конце своего имени:

update.replace('10.10.10', 3600, dns.rdatatype.PTR, 'a.test.com**.**')
person Chen Shabi    schedule 06.07.2017

У вас есть проблема с «10.10.10» в update.replace. Это должно быть полное доменное имя — «10.10.10.10.in-addr.arpa». Вы можете использовать что-то вроде этого:

Получить обратный IP

reventry = dns.reversename.from_address('10.10.10.10')

Определите зону in-addr.arpa для обновления — у меня есть .labels[3:] для файла зоны подсети класса A (10.in-addr.arpa). Если у вас есть класс C (10.10.10.in-addr.arpa), используйте .labels[1:]

revzone = ''
revzone = '.'.join(dns.name.from_text(str(reventry)).labels[3:])

И добавить действие

raction = dns.update.Update(revzone)
raction.replace(reventry, 3600, dns.rdatatype.PTR, 'a.test.com')

Это должно работать нормально.

person balonik    schedule 02.08.2016