Я создаю приложение для Android, в котором мне нужно заблокировать определенный трафик из примера приложения, если пользователь хочет заблокировать facebook, тогда оно не должно открываться ни в каком браузере или приложении Facebook.
после поиска я получил https://github.com/LipiLee/ToyShark.so я создаю службу VPN и могу получить IP-адрес из пакета путем разбора пакета, но мне нужно преобразовать IP-адрес в имя хоста, например 192.xx.xx.xx, в www.facebook.com, поэтому я использовал
try {
hostname = InetAddress.getByName(myIp).getHostName();
Log.w("Host for ", myIp + " is " + hostname) ;
}catch (UnknownHostException e){
Log.w("Unknown Host for ", myIp);
}
но я получаю
W / Host для: 172.217.3.33 is iad23s57-in-f1.1e100.net
W / Host для: 216.58.217.142это iad23s43-in-f14.1e100.net.,
Я пытался использовать для этого библиотеку MiniDNS.
ResolverResult<A> result = DnssecResolverApi.INSTANCE.resolve(hostname, A.class);
if (!result.wasSuccessful()) {
DnsMessage.RESPONSE_CODE responseCode = result.getResponseCode();
// Perform error handling.
Log.d(TAG, “ Result Not successful");
return;
}
if (!result.isAuthenticData()) {
// Response was not secured with DNSSEC.
Log.d(TAG, ”Result Not authentic");
return;
}
Set<A> answers = result.getAnswers();
for (A a : answers) {
InetAddress inetAddress = a.getInetAddress();
// Do someting with the InetAddress, e.g. connect to.
Log.d(TAG, InetAddress.toString());
}
, но получаю сообщение об ошибке
Access denied finding property "net.dns1"
, поэтому я хочу спросить ..
1.Is there any way to get the hostname from the packet other than the destination ip?
2.How to do DNS resolution in android to get hostname if i have only ip address?