Android Vpn服务保护存储在本机代码中的套接字?



我正在编写一个VPN应用程序,用于VPN连接的套接字是用我的本机C代码处理的,而不是用java处理的。如何在该插槽上使用VpnService.protect()?我注意到它有一个VpnService.protect(int)重载,我可以将socket从本机代码返回的 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);

编辑

我确实找到了这个问题,它描述了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);
    // . . . Handle other socket preparations 
        
    return (jint)socket;
}
// Java Code
public native int initializeSocket();
    
// . . . 
int socket = initializeSocket();
this.protect(socket);

最新更新