早上的人,
我尝试修改VPN示例(ToyVPN)以作为简单的防火墙来阻止某些传出流量。我决定采用以下方式:
这似乎比评估数据包更容易,并根据其内容采取行动。
这似乎适用于Android 4.3,但在4.4我收到错误:
...
09-03 06:02:11.340 1806-1897/com.example.android.toyvpn E/ToyVpnService﹕ Got java.lang.IllegalStateException: command '43 interface fwmark rule add tun0' failed with '400 43 Failed to add fwmark rule (No such device)'command '43 interface fwmark rule add tun0' failed with '400 43 Failed to add fwmark rule (No such device)'
...
这是我的VpnService Builder代码:
Builder builder = new Builder();
builder.setMtu(30000);
builder.addAddress("10.0.0.1",24);
builder.addRoute("212.77.100.101",32); // this is a sample IP I use for tests
mInterface = builder.setSession(mServerAddress)
.setConfigureIntent(mConfigureIntent)
.establish();
运行代码我什么也没做:
while (true){
Thread.sleep(1000);
Log.e(TAG,"Running");
}
结果我得到了我想要的东西 - 我手动输入的IP的流量被路由到/ dev / null类接口:)
我确信我的KitKat问题与Android 4.4中的一些错误/问题有关(例如https://code.google.com/p/android/issues/detail?id=63349但有更多与VPN相关的问题)。
但我知道我尝试实现的目标是可行的 - https://play.google.com/store/apps/details?id=com.netspark.firewall是一个在我的4.4手机上运行良好的证据。它通过VpnService完成,因为使用此应用程序时会出现相同的VPN弹出窗口。
你能帮我理解我做错了什么以及如何让VpnService在4.4上运行......不是真的要做VPN,而是做一些简单的防火墙。
这一切都适用于非root设备。
PS。我可以通过这种方式添加到VpnService的IP(IP子网)数量有限制吗?
答案 0 :(得分:-1)