利用JNI实现Linux下squid代理服务器的控制
1、Java文件
public class MyJni{
public native void exec();
static{
System.loadLibrary("MyJni");
}
}
public class Test{
public static void main(String[] args){
new MyJni().exec();
}
}
2、编译,并用javah产生头文件
javac MyJni.java
javac Test.java
javah -jni MyJni
3、编写C程序,注意包含上面产生的头文件
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include "MyJni.h"
JNIEXPORT void JNICALL Java_MyJni_exec(JNIEnv *env,jobject obj){
uid_t uid ,euid;
// char cmd[1024];
uid = getuid() ;
euid = geteuid();
printf("my uid :%u\n",getuid()); //这里显示的是当前的uid 可以注释掉.
printf("my euid :%u\n",geteuid()); //这里显示的是当前的euid
if(setreuid(euid, uid)) //交换这两个id
perror("setreuid");
printf("after setreuid uid :%u\n",getuid());
printf("afer sertreuid euid :%u\n",geteuid());
system("service squid restart"); //重新启动squid服务
}
int main(){
Java_MyJni_exec(NULL,NULL);
return 0;
}
4、编译
gcc -o libMyJni.so -shared MyJni.c -static -lc
5、添加动态链接库所在的路径到LD_LIBRARY_PATH环境变量
export LD_LIBRARY_PATH=/root;
6、运行Java程序
java Test
通过之后,也可以在Web应用程序中调用此功能
没有评论:
发表评论