テスト目的でホスト名がパブリック DNS から検索されるのを避けるために、基本的に /etc/hosts ファイルを設定する必要がありますが、IP アドレスをオーバーライドする必要があるホスト名が常にわかっているわけではないので、デフォルトの Java DNS 解決ではキャッシュに直接挿入できないため、dnsjava を使用しようとしています。
2697 次
1 に答える
-2
基本的に、dnsjava の正しい DNS タイプ キャッシュ (A、AAAA など) を取得する必要があります。ほとんどの場合、A (IPv4 の場合) または AAAA (IPv6 の場合) を使用する必要がありますが、他のすべての DNS エントリ タイプもサポートされています。Name インスタンスを作成し、そこからキャッシュに挿入される ARecord を作成する必要があります。例は次のとおりです。
public void addHostToCacheAs(String hostname, String ipAddress) throws UnknownHostException, TextParseException {
//add an ending period assuming the hostname is truly an absolute hostname
Name host = new Name(hostname + ".");
//putting in a good long TTL, and using an A record, but AAAA might be desired as well for IPv6
Record aRec = new ARecord(host, Type.A, 9999999, getInetAddressFromString(ipAddress));
Lookup.getDefaultCache(Type.A).addRecord(aRec, Credibility.NORMAL,this);
}
public InetAddress getInetAddressFromString(String ip) throws UnknownHostException {
//Assume we are using IPv4
byte[] bytes = new byte[4];
String[] ipParts = ip.split("\\.");
InetAddress addr = null;
//if we only have one part, it must actually be a hostname, rather than a real IP
if (ipParts.length <= 1) {
addr = InetAddress.getByName(ip);
} else {
for (int i = 0; i < ipParts.length; i++) {
bytes[i] = Byte.parseByte(ipParts[i]);
}
addr = InetAddress.getByAddress(bytes);
}
return addr
}
于 2015-03-30T22:42:37.257 に答える