0

我能够毫无问题地更新 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 项目,所以我完全希望我只是缺少一个类,一个函数,它将为我完成所有这些。如果有人可以向我指出该课程,将不胜感激。

4

1 回答 1

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."));
于 2014-04-10T14:54:06.320 回答