TJ1*_*J13 4 vpn ioctl openvpn android-ndk tun
我正在尝试为基于Android的应用程序构建一个VPN客户端移动设备,通过VPN隧道连接到虚拟基础架构.我有类似的Linux/Windows应用程序,我知道如何打开tun/tap设备(打开/ dev/net/tun).对于使用C的Android,我们如何做同样的事情?
另外android.net API中的类VpnService究竟做了什么?
小智 8
如果你仍然想在Android上打开一个隧道 - 本机C,我建议看看android本身是如何打开它的(来自file:services/jni/com_android_server_connectivity_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;
}
Run Code Online (Sandbox Code Playgroud)
VpnService类完全符合您的需要.它提供对tun设备的访问.如果没有root权限,则无法直接打开/ dev/net/tun.查看ToyVPN示例项目或OpenVPN for Android等开源VPN项目.
| 归档时间: |
|
| 查看次数: |
6607 次 |
| 最近记录: |