我可以毫无问题地更新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的项目,所以我完全期望我只是错过了一个具有该功能的类,它将为我完成所有这些。如果有人能够将我指向那个班级,那将非常感激。
答案 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."));