如何使用dnsjava更新DDNS服务器上的PTR记录?

时间:2014-04-10 00:33:59

标签: java dns reverse pointers dnsjava

我可以毫无问题地更新A,AAAA和TXT记录。不幸的是,我还没有找到任何更新PTR记录的例子。

以下是我用来发送更新的代码:

public void sendA(Name host, Name zone, String ip) throws IOException {
    Update update = new Update(zone);
    update.replace(host, Type.A, DNS_TTL, ip);
    sendUpdate(update);
}

public void sendPTR(Name host, Name zone, String ip) throws IOException {
    Update update = new Update(zone);
    update.replace(host, Type.PTR, DNS_TTL, ip);
    sendUpdate(update);        
}

public void sendUpdate(Update update) throws UnknownHostException, IOException {
    Resolver res = new SimpleResolver(DNS_IP);
    res.setTCP(true);
    Message response = res.send(update);
}

在该块中,sendA工作得非常好。 sendPTR尝试做同样的事情,但由于它是一个PTR,它应该把IP放在左边,主机名放在右边。

例如:

sendPTR(Name.fromString("foo.domain.net."), Name.fromString("0.168.192.in-addr.arpa."), "1");

产生如下更新的结果:

foo.domain.net    86400 IN  PTR   1.0.168.192.in-addr.arpa.

有了这个,我得到了一个RCode 10,意思是“名字不包含在区域中”。

我尝试翻转ip和主机,但结果是“'1'不是绝对的名字。”

这是我的第一个使用dnsjava的项目,所以我完全期望我只是错过了一个具有该功能的类,它将为我完成所有这些。如果有人能够将我指向那个班级,那将非常感激。

1 个答案:

答案 0 :(得分:0)

我知道了!我需要做的就是回答问题来找我。

我只需要显式实例化PTRRecord并使用Update.replace(Record)。

public void sendPTR(PTRRecord rec, Name zone) throws IOException {
    Update update = new Update(zone);
    update.replace(rec);
    sendUpdate(update);
}

...

PTRRecord rec = new PTRRecord(Name.fromString("1.0.168.192.in-addr.arpa."),DClass.IN, 86400, host);
sendPTR(rec, Name.fromString("0.168.192.in-addr.arpa."));