【问题标题】:Xamarin Android - VpnService is blocking all appsXamarin Android - VpnService 阻止所有应用程序
【发布时间】:2018-05-21 20:21:52
【问题描述】:

我正在设计的应用程序使用 VpnService 以及 VpnService.Builder 类来生成 VPN,以阻止来自特定应用程序的流量。根据 developer.android.com 上的文档,在调用 Builder.AddAllowedApplication 或 Builder.AddDisallowedApplication 之前,应允许所有应用程序通过 VPN。

当我的 VPN 服务启动时,由于某种原因,所有应用程序都被禁止使用,这很奇怪。一旦我与 VPN 断开连接,所有应用程序就会再次可用。我需要允许所有,除非另有说明(这是文档所说的应该发生的)。我通过调用以下命令启动 VPN:

    private string _sTag = typeof(VpnService).Name;
    private VpnServiceBinder _objBinder;
    private ParcelFileDescriptor _objVpnInterface = null;
    private PendingIntent _objPendingIntent = null;
    ...

        if (_objVpnInterface == null)
        {
            Builder objVpnBuilder = new Builder(this);
            objVpnBuilder.AddAddress("10.0.0.2", 32);
            objVpnBuilder.AddRoute("0.0.0.0", 0);

            // Form the interface
            _objVpnInterface = objVpnBuilder.SetSession("Squelch").SetConfigureIntent(_objPendingIntent).Establish();

            // Disallow instagram as a test
            objVpnBuilder.AddDisallowedApplication("com.instagram.android");

            // Set flag
            _bVpnIsRunning = true;
        }

所以在上面的例子中,instagram 应该是唯一被阻止的应用程序,但所有流量似乎都被阻止(无法使用 chrome 应用程序、facebook 等)。在这方面我有什么遗漏吗?我应该在建立接口之前/之后指定一些东西吗?任何帮助或指导将不胜感激!

注意:如果重要的话,我的目标是 android 6.0 及更高版本。如果需要,我可以提供更多来源。

【问题讨论】:

    标签: c# android xamarin xamarin.android


    【解决方案1】:

    addDisallowedApplication:

    默认情况下,所有应用程序都被允许访问,但通过此方法拒绝的应用程序除外。被拒绝的应用程序将使用网络,就像 VPN 没有运行一样。

    AddDisallowedApplication 将应用程序从 您的 VPNService 中排除,并允许它继续使用“非 VPN”网络堆栈。

    addAllowedApplication:

    添加允许访问 VPN 连接的应用程序

    注意:您可以使用允许或禁止列表,但不能同时使用两者。

    假设我们想要“阻止”任何 Chrome 包访问正常的网络堆栈并重定向任何 Chrome 应用程序通过我们的“阻止”VPN 访问网络,我们可以将所有 Chrome 应用程序包名称添加到我们的VPNService实施。

    注意:有 4(?) 个不同的 Chrome 应用程序,alpha 版,beta 版等......所以让我们阻止任何名称为 chrome 的包,这不是很理想,但举个例子,它可以工作.

    using (var pm = Application.Context.PackageManager)
    {
        var packageList = pm.GetInstalledPackages(0);
        foreach (var package in packageList)
        {
            if (package.PackageName.Contains("chrome"))
            {
                Log.Debug(TAG, package.PackageName);
                builder.AddAllowedApplication(package.PackageName);
            }
        }
    }
    

    在您.Establish() VPN 连接后,所有 Chrome 应用程序网络将被重定向到您的 VPNService 并因此被阻止。

    【讨论】:

    • 天哪,我觉得自己很傻!我对 AddAllowedApplication 和 AddDisallowedApplication 的理解被颠倒了!你就是那个男人,或者女人,或者shushi!
    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多