java - Android VpnService 保护存储在 native 代码中的套接字?

标签 java android c sockets android-vpn-service

我正在编写一个 VPN 应用程序,用于 VPN 连接的套接字是在我的 native C 代码中处理的,而不是在 java 中。如何在该套接字上使用 VpnService.protect()?我注意到它有一个 VpnService.protect(int) 重载,我可以将 socket 从 native 代码返回的 int 返回给 Java 并以这种方式保护它吗?

示例

// Native Code
int socket;

JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
    JNIEnv *env,
    jobject jobj
) {
    socket = socket(AF_INET, SOCK_DGRAM, 0);

    // . . . Handler other socket preparations 

    return (jint)socket;
}

// Java Code
public native int initializeSocket();

. . . 

int socket = initializeSocket();
this.protect(socket);

编辑

我确实找到了 this question它描述了 protect 函数是如何工作的,看起来它可能在 C 中有一个非常简单的实现,因为它似乎只是使用 setsockopt 调用。但我对 C 也比较陌生,所以我不太了解如何复制它。

最佳答案

我只是想验证我的流程是否有效,在完成更多测试后我已经验证它有效。

示例

// Native Code
int socket;

JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
    JNIEnv *env,
    jobject jobj
) {
    socket = socket(AF_INET, SOCK_DGRAM, 0);

    // . . . Handler other socket preparations 

    return (jint)socket;
}

// Java Code
public native int initializeSocket();

. . . 

int socket = initializeSocket();
this.protect(socket);

关于java - Android VpnService 保护存储在 native 代码中的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479021/

相关文章:

java - Spring Security 删除用户 - session 仍然有效

android - 如何将应用程序预加载器/启动屏幕/启动屏幕添加到我的 PhoneGap Android 应用程序

Android:OAuth2 - 如何实现记住我的功能?

c - 如何将结构写入文件?

java - 如何在 Apache(不是 Tomcat)服务器上执行基于 Java 的 OWL 推理器?

java - 从网络读取数据

java - 如何将数组转换为字符数组?

android - 如何在树莓派 3 的 Android Things 中启用 USB API

c - 分配大字符串时大小 1 的读取无效

c - 为共享内存初始化结构体中的 int