The java.net.InetAddress.GetByName(String host)
method can only return A
records so to lookup other record types I need to be able to send DNS queries using the dnsjava
library.
However that normally relies on being able to parse /etc/resolv.conf
or similar to find the DNS server addresses and that doesn't work on Android.
The current DNS settings on Android can apparently only be obtained from within a shell by using the getprop
command.
Can anyone tell me how to get those settings from Java other than by spawning a shell with Runtime.exec()
and parsing the output from getprop
?
DNS records are stored in authoritative servers. These records provide information about a domain, including its associated IP address for each domain. It is mandatory for all domains to have a specific set of default records.
The DNS protocol is not that complex - can't you just do the DNS accesses using raw sockets (either TCP or UDP)? After a quick look at the dnsjava doco it seems to provide low level DNS support to assist with this.
The other possible direction is, starting with dnsjava, to remove the dependence on /etc/resolv.conf
. I would think about using getprop in your launch script to set properties in the JVM, or to create a localized resolv.conf
file in your app's directory from which you can read the information needed. In other words, use getprop to inject information into the JVM instead of attempting to pull it in once the JVM is going. Surely creating a file that dnsjava can use directly should be doable.
It looks like android.net.ConnectivityManager
will deliver you an array of NetworkInfo's using getAllNetworkInfo()
. Then use android.net.NetworkUtils.runDhcp()
to get a DhcpInfo for any given network interface - the DhcpInfo structure has the IP address for dns1 and dns2 for that interface. Surprised that the DNS's are int, therefore implying IP4 only, though.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With