问题标签 [android-vpn-service]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
232 浏览

java - android DatagramChannel 隧道必须连接到 VpnService 中的服务器?

我在 android 中编写一个 VPN 来观察本地网络流量(数据包),并在检查后让数据包离开。我的应用程序基于ToyVPN,到目前为止我可以接收数据包,但我无法通过隧道发送它们。我看到隧道连接到('127.0.0.1',9040)。我的问题是,是否需要一个服务器来绑定 ('127.0.0.1',9040) 以响应其他隧道端?如果不?隧道连接到哪里?基本上这条隧道是如何工作的?


查看部分代码:

0 投票
0 回答
118 浏览

android - android ToyVPN 中使用了什么样的协议?

关于ToyVPN(Android 的示例客户端/服务器 VPN),据我所知,它没有像 L2TP、PPTP 等强大的身份验证和加密......那么,

1- 使用什么样的协议ToyVPN
2- 安全吗?我的意思是有人可以侵入 VPN 隧道吗?
3- 如果不安全;那么我能做些什么来加密隧道呢?
4- 路由器是否能够检测到这是 VPN 隧道?还是被检测为简单的套接字链接?

0 投票
2 回答
158 浏览

android - VpnService - 更新网络参数

我有一个 VPN 服务,使用 ParcelFileDescriptor 和一个构建器来设置网络参数。像这样的代码:

现在,我想在连接时更新网络参数(例如 DNS 服务器)。

文档中的相关部分是这样的:

为避免冲突,同一时间只能有一个活动 VPN 接口。通常网络参数在 VPN 连接的生命周期内永远不会改变。应用程序在关闭前一个文件描述符后创建新的文件描述符也很常见。但是,在执行无缝切换时很少有两个接口,但并非不可能。在这种情况下,新界面创建成功后,旧界面将被停用。两个文件描述符都是有效的,但现在传出的数据包将被路由到新接口。因此,在耗尽旧的文件描述符之后,应用程序必须关闭它并开始使用新的文件描述符。如果无法创建新接口,则现有接口及其文件描述符保持不变。

正如它所说 - “通常网络参数在 VPN 连接的生命周期内永远不会改变”,但我确实想改变它们。可能吗?

0 投票
1 回答
390 浏览

android - 如果 VPN 应用程序被杀死,它会发生什么?

这是一个普遍的问题,因为我对以下场景没有足够的理解,不幸的是在谷歌上找不到任何解释它的东西。

假设我有一个扩展 VPN 服务的应用程序、一些异步任务、一些线程来读取和处理从 VPN 接口读取的数据包。据了解,一旦我们启动 VPN,虽然我们从任务中终止了应用程序(强制退出),但 VPN 会继续运行。

那么当我们杀死应用程序时会发生什么?是否所有资源(线程、主 UI 线程)都被破坏了?

同样,当我们重新启动应用程序时,是否所有资源都再次初始化?

你能解释一下它是如何在这里工作的吗?

我有这个问题是因为我有一个在主线程上运行的后台线程。当我强制关闭应用程序时,线程不会中断,但是当我在重新启动应用程序后(强制退出或终止后)尝试更新线程时,我得到一个空指针异常,因为该线程不可访问。整个 UI 线程是否被重新初始化?

使用 VPN 服务解决这种情况的方法是什么。

0 投票
1 回答
934 浏览

android - VpnService 永远在线“此应用程序不支持”

我正在尝试为android编写一个VPN应用程序,无论我做什么,我的应用程序的“始终开启”设置似乎都是灰色的。

我在 android 文档的任何地方都找不到任何文档说明为什么可能不允许 VpnService 使用“始终开启”功能。

只是为了确保我清楚,如果我手动启用它,我的 VpnService 工作得很好。我可以毫无问题地连接、使用它等。我只是对为什么在 Android 设置中它在我的 Vpn 服务的“始终开启”切换下显示为“不支持此设备”感到困惑。

注意:我使用的是自定义协议,在某个论坛上,我确实看到过“谷歌不允许不使用谷歌白名单协议的 VPN 的 Always-On”,但是我在哪里找不到支持这一说法的文件,所以我怀疑这是原因。

我从阅读Android 文档中发现:

  1. 如果您在 Android Manafest 中的定义中显式提供SERVICE_META_DATA_SUPPORTS_ALWAYS_ON标志,其值将告诉系统您的应用程序不支持 Always On 功能。但是,如果您将其省略,则默认为. 所以应该没有必要提供这个。<service>falsetrue

  2. 根据AppManagementFragment.java#updateRestrictedViews中的 Android 源,它使用了一个函数mConnectivityManager.isAlwaysOnVpnPackageSupportedForUser(mUserId, mPackageName),但是我很难遵循这个函数的逻辑。查看ConnectivityManager.java#isAlwaysOnVpnPackageSupportedForUser时,它似乎最终出现在ConnectivityService.java#isAlwaysOnVpnPackageSupported最终指向Vpn.java#isAlwaysOnPackageSupported如果满足以下条件之一,这可能导致您的 VPN 被认为不支持始终开启:

    1. 传递给函数的包名称为空。
    2. 系统无法使用PackageManager. getApplicationInfoAsUser().
    3. 申请目标小于VERSION_CODES.N
    4. 该软件包中不包含任何 Vpn 服务AndroidManifest.xml
    5. 该包定义了任何 VpnServices,其SERVICE_META_DATA_SUPPORTS_ALWAYS_ON元数据设置为false.

注意:我的应用程序针对 API 29。

就是这样。

由于我的应用程序满足 中所述的所有要求Vpn.java#isAlwaysOnPackageSupported,我对它为什么不起作用感到非常困惑。

我创建了一个 android studio 项目来演示我的三星 Galaxy S10 上发生的这种情况。你可以在 github 上找到它

我的参考代码:

我的服务按照 Android 文档中的说明进行配置。

在我的仪表板活动中,我使用它来处理Connect被点击的按钮。

然后我使用以下方法处理结果:

我的VpnProvider类扩展VpnService并具有以下用于构建接口的内容:

0 投票
0 回答
942 浏览

java - 将 Android 设备设置为 HTTP 代理服务器?

有什么方法可以将安卓手机设置为 http 代理服务器,其他设备可以使用该服务器浏览互联网?我知道可能会使用一些套接字代码,但是我可以使用任何开源代码吗?或者有没有任何网站谈论这个。

0 投票
0 回答
35 浏览

java - 是否可以使用 VpnService 查看 HTTPS 请求的路径

我需要能够查看通过托管本地 VPN 服务器的 VpnService 建立的 HTTPS 连接的路径(和标头)。这可能吗?

例如,当访问https://google.com/somedir/somejsfile.js时,我需要能够看到整个路径(例如 google.com/somedir/somejsfile.js)而不是 SNI(google. com)。在对最终用户安全的情况下,这是否有可能?

我已经成功地处理了 HTTP 请求并成功地看到了 HTTP 请求,但是,现在大多数流量都是通过 HTTPS 的,所以我需要一种方法来以某种方式通过 HTTPS 来查看请求标头。

以下代码显示了我如何建立 VpnService,并分别读取/写入传入/传出数据包。

非常感谢有关此问题的任何帮助或指导。

先感谢您。

0 投票
1 回答
97 浏览

java - 无法创建 Vpn 服务

我是初学者,在使用 VpnService 时遇到问题。

错误的 prefixLength 原因:android.net.VpnService$Builder.addAddress(VpnService.java:496)

以上是错误日志。

这是我的代码。

我的 IP 地址是 ipv4,但我不知道为什么会发生错误。我需要帮助。谢谢您的帮助。

0 投票
1 回答
92 浏览

android - 如何找出android OS是否停止服务

我已经使用 android 编写了一个 VPN VPNService,它运行良好。当我运行它时,它会创建一个前台服务并通过我的 VPN 服务器发送所有流量。它还具有内部重新连接机制,如果它因任何原因断开连接而不停止服务本身,则可以重新连接 VPN 服务器。

我喜欢让这个 VPN 服务一直工作。但我的问题是,这个 VPN 服务在完全随机的一段时间后偶尔会停止(有时只需要 10 分钟,但有时它会在停止前工作 2-3 天)。

由于停止时间是完全随机的,而且我在代码中找不到任何会造成这种情况的地方(我已经调试了好几个星期),我想也许 android OS 本身会VPNService因为某种原因停止我的工作。我想知道是否有办法检测系统是否从外部停止了我的服务。任何想法?

0 投票
1 回答
59 浏览

android - 如果客户端安装了 VPN,是否可以从应用程序获取真实 IP 地址?

如果客户端安装了 VPN,是否有可能从应用程序获取真实 IP 地址?这适用于 Android 和/或 ios。