当前位置: 首页 > 知识库问答 >
问题:

如何使用本机代码C在android上打开tap设备?

安浩瀚
2023-03-14

我试图建立一个VPN客户端移动基于Android的应用程序,连接到虚拟架构体系的VPN隧道。我有一个类似的Linux /Windows的应用程序,我知道如何打开一个屯/水龙头设备(打开 /dev/net/tun)。我们如何使用C为Android做同样的事情?

还有,android中的VPN类服务是什么。net API到底做什么?

共有2个答案

董胡媚
2023-03-14

VPN服务类完全满足您的需要。它提供对tun设备的访问。如果没有根权限,则无法直接打开/dev/net/tun。请参阅ToyVPN示例项目或开源VPN项目,如openvpnforandroid。

闽康安
2023-03-14

如果您仍然想在android-native C上打开一个隧道,我建议您看看android本身是如何打开它的(来自文件:services/jni/com\u android\u server\u connectivity\u Vpn.cpp)

static int create_interface(int mtu)
{
    int tun = open("/dev/tun", O_RDWR | O_NONBLOCK);
    ifreq ifr4;
    memset(&ifr4, 0, sizeof(ifr4));
    // Allocate interface.
    ifr4.ifr_flags = IFF_TUN | IFF_NO_PI;
    if (ioctl(tun, TUNSETIFF, &ifr4)) {
        ALOGE("Cannot allocate TUN: %s", strerror(errno));
        goto error;
    }
    // Activate interface.
    ifr4.ifr_flags = IFF_UP;
    if (ioctl(inet4, SIOCSIFFLAGS, &ifr4)) {
        ALOGE("Cannot activate %s: %s", ifr4.ifr_name, strerror(errno));
        goto error;
    }
    // Set MTU if it is specified.
    ifr4.ifr_mtu = mtu;
    if (mtu > 0 && ioctl(inet4, SIOCSIFMTU, &ifr4)) {
        ALOGE("Cannot set MTU on %s: %s", ifr4.ifr_name, strerror(errno));
        goto error;
    }
    return tun;
error:
    close(tun);
    return SYSTEM_ERROR;
}
 类似资料:
  • 本文向大家介绍Android webview打开本地图片上传实现代码,包括了Android webview打开本地图片上传实现代码的使用技巧和注意事项,需要的朋友参考一下 Webview打开本地图片选择器十分之麻烦,其在安卓系统3x 4x 5x上的行为都不同,处理也不同,所以之前差点崩溃。经过测试和完善,最终其在各个版本上都能完美工作。 直接上代码 以上就是本文的全部内容,希望对大家的学习有所帮助

  • 我已经下载了SDK manager帮助的所有文档。但是下载后,我如何在Android Studio中打开这些文档和代码示例呢?

  • 我使用的是MapsForge0.6.1,我可以用以下简化的示例来再现这个问题,它基本上是本教程的副本:https://github.com/Mapsforge/Mapsforge/blob/master/docs/gett-start-android-app.md 我做了一些小改动以配合新版本。 问题是,当您旋转屏幕时,会调用,后面是。我可以通过在地图活动和其他活动之间切换,用具有多个活动的更复杂

  • 我在OS X(10.10.1)上使用Kivy和buildozer,但我无法在我的android设备上运行Kivy相机应用程序。不使用相机的情况很好。代码如下,我还可以发布buildozer规范文件和调试信息。任何帮助都很感激。 从kivy.App导入应用程序从kivy.uix.Widget导入小部件从kivy.uix.Camera导入相机从kivy.uix.Button导入按钮从kivy.core

  • 在我的计算机上,这两个命令都导致响应“没有匹配的命令”。我需要安装任何特殊的扩展来使其工作吗?我运行的是macOS 11.1和VS代码1.52.1。

  • 使用远程开发扩展包,VisualStudioCode可以打开当前系统上运行的Docker容器,并打开使用SSH连接的远程主机上的文件夹。 如果远程SSH主机上运行Docker容器,VSCode如何打开该容器中的文件/文件夹?