如何使用DNSPython添加反向IP记录

时间:2015-12-30 08:23:41

标签: dns dnspython bind9

我尝试使用DNSPython添加DNS记录;

当我设置这样的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,Thx~

3 个答案:

答案 0 :(得分:1)

我发现了问题:

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

这应该是这样的;

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.

但另一个问题是:这种更新反向dns的方法并不总是成功,有时当我使用&nsnsup' nslookup'测试,它似乎没有添加到DNS服务器;

还有什么,当我查询ip时:

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

这不是我想要的,当使用nsupdate添加时,它只显示:

if (FileUpload1.HasFile){
        if (FileUpload1.PostedFile.ContentType == "text/xml")
        {
            string filename = Path.GetFileName(FileUpload1.FileName);
            string path = Server.MapPath(ConfigurationManager.AppSettings["Path"]) + filename;
            if (File.Exists(path))
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "", "ConfirmBox();", true);
                ExistPath = path;
                Session["FileUpload1"] = FileUpload1;
                Session["GridView1"] = GridView1;

            }
            else
            {
                SaveXml(path);
            }
        }
}

我该怎么做才能解决这个问题?

答案 1 :(得分:1)

我自己遇到这个问题 你在名字的末尾错过了一个点:

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

答案 2 :(得分:-1)

您对' 10.10.10'在update.replace中。 它必须是FQDN - ' 10.10.10.10.in-addr.arpa'。 你可以使用这样的东西:

获取反向IP

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

定义要更新的in-addr.arpa区域 - 我有Alab子网区域文件(10.in-addr.arpa)的.labels [3:]。如果你有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')

这应该可以正常工作。