1

我有一个 VpnService,其中包含一些允许的应用程序和一些不允许的应用程序,这些应用程序来自一个可能随时更改的列表。

public void onCreate() {
    super.onCreate();
    isRunning = true;
    setupVPN();

    LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(BROADCAST_VPN_STATE).putExtra("running", true));
    Log.i(TAG, "Started");

    registerReceiver(stopBr, new IntentFilter("stop_vpn"));

    setupNotification();
}

private void setupVPN() {
    if (vpnInterface == null) {
        Builder builder = new Builder();
        builder.addAddress(VPN_ADDRESS, 32);
        builder.addRoute(VPN_ROUTE, 0);
        // Deciding which applications will be able to access the internet
        try {
            builder.addDisallowedApplication("com.android.chrome");
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        vpnInterface = builder.setSession(getString(R.string.app_name)).setConfigureIntent(pendingIntent).establish();
    }
}

在这种情况下,应用程序只是不允许“com.android.chrome”。Vpn 实际上不处理任何传入的数据包,所以我用它来阻止流量,这意味着任何不是“不允许”列表的应用程序都无法访问互联网。

问题:如果想在运行时更改不允许的应用程序列表怎么办?我是否必须有外部服务或其他东西来控制 VpnService 还是有其他方法可以做到这一点?

我的第一个想法是使用不同参数检测并重新启动 Vpn 的外部服务,但对于这样的事情似乎有点复杂。

我还认为它可以通过另一种方式来完成,即拥有一个完全正常工作的 Vpn 并通过应用程序过滤数据包。但是(假设有一种方式将数据包绑定到应用程序)我将如何确定哪些数据包与哪些应用程序相关联?

4

0 回答 0