Allow querying specific dns server by name/ip and port
This commit is contained in:
parent
114bda4d3f
commit
62a61c8df0
|
@ -30,6 +30,16 @@ public class Client {
|
|||
*/
|
||||
protected Random random;
|
||||
|
||||
/**
|
||||
* The buffer size for dns replies.
|
||||
*/
|
||||
protected int bufferSize = 1500;
|
||||
|
||||
/**
|
||||
* DNS timeout.
|
||||
*/
|
||||
protected int timeout = 5000;
|
||||
|
||||
/**
|
||||
* Create a new DNS client.
|
||||
*/
|
||||
|
@ -41,6 +51,26 @@ public class Client {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Query a nameserver for a single entry.
|
||||
* @param name The DNS name to request.
|
||||
* @param type The DNS type to request (SRV, A, AAAA, ...).
|
||||
* @param clazz The class of the request (usually IN for Internet).
|
||||
* @param host The DNS server host.
|
||||
* @param port The DNS server port.
|
||||
* @return
|
||||
* @throws IOException On IO Errors.
|
||||
*/
|
||||
public DNSMessage query(String name, TYPE type, CLASS clazz, String host, int port)
|
||||
throws IOException
|
||||
{
|
||||
Question q = new Question();
|
||||
q.setClazz(clazz);
|
||||
q.setType(type);
|
||||
q.setName(name);
|
||||
return query(q, host, port);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query a nameserver for a single entry.
|
||||
* @param name The DNS name to request.
|
||||
|
@ -83,6 +113,17 @@ public class Client {
|
|||
* @throws IOException On IOErrors.
|
||||
*/
|
||||
public DNSMessage query(Question q, String host) throws IOException {
|
||||
return query(q, host, 53);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query a specific server for one entry.
|
||||
* @param q The question section of the DNS query.
|
||||
* @param host The dns server host.
|
||||
* @param port the dns port.
|
||||
* @throws IOException On IOErrors.
|
||||
*/
|
||||
public DNSMessage query(Question q, String host, int port) throws IOException {
|
||||
DNSMessage message = new DNSMessage();
|
||||
message.setQuestions(new Question[]{q});
|
||||
message.setRecursionDesired(true);
|
||||
|
@ -90,10 +131,10 @@ public class Client {
|
|||
byte[] buf = message.toArray();
|
||||
DatagramSocket socket = new DatagramSocket();
|
||||
DatagramPacket packet = new DatagramPacket(
|
||||
buf, buf.length, InetAddress.getByName(host), 53);
|
||||
socket.setSoTimeout(5000);
|
||||
buf, buf.length, InetAddress.getByName(host), port);
|
||||
socket.setSoTimeout(timeout);
|
||||
socket.send(packet);
|
||||
packet = new DatagramPacket(new byte[513], 513);
|
||||
packet = new DatagramPacket(new byte[bufferSize], bufferSize);
|
||||
socket.receive(packet);
|
||||
DNSMessage dnsMessage = DNSMessage.parse(packet.getData());
|
||||
if (dnsMessage.getId() != message.getId()) {
|
||||
|
|
Loading…
Reference in a new issue