首页 文章

Android DNS查找和更改DHCP

提问于
浏览
2

我正在为封闭的商业环境编写Android Kiosk应用程序 . 我的设备通过以太网连接到本地Web服务器以显示网页 .
现在问题是,在夜晚,服务器将被关闭,如果发生这种情况,我的DHCP服务器也会关闭 . 如果我的Android在这种情况下启动,它会在它处于省电模式时,如果确实如此,那么它就会得到关注 .
为了使它更复杂,它工作 . 我设法得到一个DHCP和DNS服务器,我可以在其中定义我的服务器主机名,这在所有站点都是相同的 . 但是,Android有一个错误解决不完全限定的域名(Link),所以我的应用程序不能直接连接到主机名(例如 http://hostname/index.html ),但必须手动解析主机名的IP地址,然后连接到该IP地址 . 作为我能找到的唯一解决方案是dnsjava(Link),我用它来解析IP .

import org.xbill.DNS.*;

InetAddress addr = Address.getByName("hostname");
ipAddress = addr.getHostAddress();

这实际上有效,但这是事情:
如果Android和我启动没有IP,它当然可以't resolve the hostname. However if my DHCP/DNS server starts up, the device won' t获取IP地址,除非我告诉他这样做:

runShellCommand("killall dhcpcd"); 
runShellCommand("ifconfig eth0 192.168.99.99");
runShellCommand("ifconfig eth0 0.0.0.0"); 
runShellCommand("dhcpcd eth0");

runShellCommand将...运行一个shell命令,实际上效果很好 .

无论如何,这将从DHCP获得一个新的IP地址(由DHCP服务器的日志文件证明),但是 the hostname will not be resolved .
重新启动应用程序将无法正常工作,即使使用其他应用程序进行测试(Ping & DNS)也无效 .

The only way it works 在设置 - >以太网中时,我取消单击DHCP并再次单击它 . 这会以某种方式刷新DNS缓存?!但是如何以编程方式做到这一点?

顺便说一句:当DHCP / DNS服务器在线时,我测试启动我的App和Android,它会连接并工作,当我关闭服务器时,我的Android总是使用这个IP地址回答DNS查询,即使我没有本地IP了 .
对我来说,似乎Android在将设置DHCP更改为固定IP并返回时确实执行了刷新 .
我希望有人能帮帮忙!

1 回答

  • 0

    你需要踢解析器:

    runShellCommand("ndc resolver setifdns eth0 \"\" 8.8.8.8 8.8.4.4");
    runShellCommand("ndc resolver setdefaultif eth0");
    

相关问题