问题标签 [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.
java - android DatagramChannel 隧道必须连接到 VpnService 中的服务器?
我在 android 中编写一个 VPN 来观察本地网络流量(数据包),并在检查后让数据包离开。我的应用程序基于ToyVPN
,到目前为止我可以接收数据包,但我无法通过隧道发送它们。我看到隧道连接到('127.0.0.1',9040)。我的问题是,是否需要一个服务器来绑定 ('127.0.0.1',9040) 以响应其他隧道端?如果不?隧道连接到哪里?基本上这条隧道是如何工作的?
查看部分代码:
android - android ToyVPN 中使用了什么样的协议?
关于ToyVPN(Android 的示例客户端/服务器 VPN),据我所知,它没有像 L2TP、PPTP 等强大的身份验证和加密......那么,
1- 使用什么样的协议ToyVPN
?
2- 安全吗?我的意思是有人可以侵入 VPN 隧道吗?
3- 如果不安全;那么我能做些什么来加密隧道呢?
4- 路由器是否能够检测到这是 VPN 隧道?还是被检测为简单的套接字链接?
android - VpnService - 更新网络参数
我有一个 VPN 服务,使用 ParcelFileDescriptor 和一个构建器来设置网络参数。像这样的代码:
现在,我想在连接时更新网络参数(例如 DNS 服务器)。
文档中的相关部分是这样的:
为避免冲突,同一时间只能有一个活动 VPN 接口。通常网络参数在 VPN 连接的生命周期内永远不会改变。应用程序在关闭前一个文件描述符后创建新的文件描述符也很常见。但是,在执行无缝切换时很少有两个接口,但并非不可能。在这种情况下,新界面创建成功后,旧界面将被停用。两个文件描述符都是有效的,但现在传出的数据包将被路由到新接口。因此,在耗尽旧的文件描述符之后,应用程序必须关闭它并开始使用新的文件描述符。如果无法创建新接口,则现有接口及其文件描述符保持不变。
正如它所说 - “通常网络参数在 VPN 连接的生命周期内永远不会改变”,但我确实想改变它们。可能吗?
android - 如果 VPN 应用程序被杀死,它会发生什么?
这是一个普遍的问题,因为我对以下场景没有足够的理解,不幸的是在谷歌上找不到任何解释它的东西。
假设我有一个扩展 VPN 服务的应用程序、一些异步任务、一些线程来读取和处理从 VPN 接口读取的数据包。据了解,一旦我们启动 VPN,虽然我们从任务中终止了应用程序(强制退出),但 VPN 会继续运行。
那么当我们杀死应用程序时会发生什么?是否所有资源(线程、主 UI 线程)都被破坏了?
同样,当我们重新启动应用程序时,是否所有资源都再次初始化?
你能解释一下它是如何在这里工作的吗?
我有这个问题是因为我有一个在主线程上运行的后台线程。当我强制关闭应用程序时,线程不会中断,但是当我在重新启动应用程序后(强制退出或终止后)尝试更新线程时,我得到一个空指针异常,因为该线程不可访问。整个 UI 线程是否被重新初始化?
使用 VPN 服务解决这种情况的方法是什么。
android - VpnService 永远在线“此应用程序不支持”
我正在尝试为android编写一个VPN应用程序,无论我做什么,我的应用程序的“始终开启”设置似乎都是灰色的。
我在 android 文档的任何地方都找不到任何文档说明为什么可能不允许 VpnService 使用“始终开启”功能。
只是为了确保我清楚,如果我手动启用它,我的 VpnService 工作得很好。我可以毫无问题地连接、使用它等。我只是对为什么在 Android 设置中它在我的 Vpn 服务的“始终开启”切换下显示为“不支持此设备”感到困惑。
注意:我使用的是自定义协议,在某个论坛上,我确实看到过“谷歌不允许不使用谷歌白名单协议的 VPN 的 Always-On”,但是我在哪里找不到支持这一说法的文件,所以我怀疑这是原因。
我从阅读Android 文档中发现:
如果您在 Android Manafest 中的定义中显式提供SERVICE_META_DATA_SUPPORTS_ALWAYS_ON标志,其值将告诉系统您的应用程序不支持 Always On 功能。但是,如果您将其省略,则默认为. 所以应该没有必要提供这个。
<service>
false
true
根据AppManagementFragment.java#updateRestrictedViews中的 Android 源,它使用了一个函数
mConnectivityManager.isAlwaysOnVpnPackageSupportedForUser(mUserId, mPackageName)
,但是我很难遵循这个函数的逻辑。查看ConnectivityManager.java#isAlwaysOnVpnPackageSupportedForUser时,它似乎最终出现在ConnectivityService.java#isAlwaysOnVpnPackageSupported并最终指向Vpn.java#isAlwaysOnPackageSupported如果满足以下条件之一,这可能导致您的 VPN 被认为不支持始终开启:- 传递给函数的包名称为空。
- 系统无法使用
PackageManager. getApplicationInfoAsUser()
. - 申请目标小于
VERSION_CODES.N
- 该软件包中不包含任何 Vpn 服务
AndroidManifest.xml
。 - 该包定义了任何 VpnServices,其
SERVICE_META_DATA_SUPPORTS_ALWAYS_ON
元数据设置为false
.
注意:我的应用程序针对 API 29。
就是这样。
由于我的应用程序满足 中所述的所有要求Vpn.java#isAlwaysOnPackageSupported
,我对它为什么不起作用感到非常困惑。
我创建了一个 android studio 项目来演示我的三星 Galaxy S10 上发生的这种情况。你可以在 github 上找到它。
我的参考代码:
我的服务按照 Android 文档中的说明进行配置。
在我的仪表板活动中,我使用它来处理Connect
被点击的按钮。
然后我使用以下方法处理结果:
我的VpnProvider
类扩展VpnService
并具有以下用于构建接口的内容:
java - 将 Android 设备设置为 HTTP 代理服务器?
有什么方法可以将安卓手机设置为 http 代理服务器,其他设备可以使用该服务器浏览互联网?我知道可能会使用一些套接字代码,但是我可以使用任何开源代码吗?或者有没有任何网站谈论这个。
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,并分别读取/写入传入/传出数据包。
非常感谢有关此问题的任何帮助或指导。
先感谢您。
java - 无法创建 Vpn 服务
我是初学者,在使用 VpnService 时遇到问题。
错误的 prefixLength 原因:android.net.VpnService$Builder.addAddress(VpnService.java:496)
以上是错误日志。
这是我的代码。
我的 IP 地址是 ipv4,但我不知道为什么会发生错误。我需要帮助。谢谢您的帮助。
android - 如何找出android OS是否停止服务
我已经使用 android 编写了一个 VPN VPNService
,它运行良好。当我运行它时,它会创建一个前台服务并通过我的 VPN 服务器发送所有流量。它还具有内部重新连接机制,如果它因任何原因断开连接而不停止服务本身,则可以重新连接 VPN 服务器。
我喜欢让这个 VPN 服务一直工作。但我的问题是,这个 VPN 服务在完全随机的一段时间后偶尔会停止(有时只需要 10 分钟,但有时它会在停止前工作 2-3 天)。
由于停止时间是完全随机的,而且我在代码中找不到任何会造成这种情况的地方(我已经调试了好几个星期),我想也许 android OS 本身会VPNService
因为某种原因停止我的工作。我想知道是否有办法检测系统是否从外部停止了我的服务。任何想法?
android - 如果客户端安装了 VPN,是否可以从应用程序获取真实 IP 地址?
如果客户端安装了 VPN,是否有可能从应用程序获取真实 IP 地址?这适用于 Android 和/或 ios。