vpnjava实现的简单介绍

博主:adminadmin 2022-11-30 18:33:06 1377

本篇文章给大家谈谈vpnjava实现,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

通过hook connect 函数 实现 VPN功能是否可行

在android系统中,可以使用iptables控制单个应用网络访问。在google code上有一个开源项目-droidwall就是基于iptables实现的。除了iptables可以实现控制单个应用网络访问外,还可以通过拦截应用中的connect函数,达到控制应用访问网络的目的。下面从几个方面分析android应用中connect调用流程为例来实现拦截connect实现网络禁用和ip过滤。(以下分析基于4.2源码)

1.android中网络访问流程

1)android系统中访问网络可以通过Socket.java、URL.java、HttpPost.java、HttpGet.java等关键类来访问网络资源。通过代码追踪,这些类访问网络资源最终需要通过native方式,调用linux系统下的socket函数访问网络。在android4.2源码中,java层访问网络得native方法定义在源码路径libcore/luni/src/main/java/libcore/io/Posix.java中(4.0之前的网络系统、文件系统的native方法是独立分开得,4.0之后组织在Posix.java中)。如下是Posix.java中的代码片段:

public final class Posix implements Os {    Posix() { }    public native FileDescriptor accept(FileDescriptor fd, InetSocketAddress peerAddress) throws ErrnoException, SocketException;    public native boolean access(String path, int mode) throws ErrnoException;    public native void bind(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException;    ......    //对应linux下的connect系统调用    public native void connect(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException; 

2)Posix.java中的native方法实现源码路径libcore/luni/src/main/native/libcore_io_Posix.cpp文件中,native   connect方法实现代码片段如下:

taticvoidPosix_connect(JNIEnv*env,jobject,jobjectjavaFd,jobjectjavaAddress,jintport)

{

    sockaddr_storagess;

    if(!inetAddressToSockaddr(env,javaAddress,port,ss))

    {

        return;

    }

    constsockaddr*sa=reinterpret_castconstsockaddr*(ss);

    (void)NET_FAILURE_RETRY(env,int,connect,javaFd,sa,sizeof(sockaddr_storage));

}

有上代码可知,java层connect最终功能由linux系统connect函数实现。

2.so注入

so注入可以参考古河大哥牛逼的libInject(点击这里访问)。

3.拦截connect库编写

在connect中,获取传入的参数ip地址,根据需要把需要禁用的ip地址改为127.0.01.以下是我测试的拦截connect函数关键代码:

intnew_connect(intsockfd,conststructsockaddr*addr,socklen_taddrlen)

{

    LOGDD("HOOK

 ====new connect****************");

    charip[128]={0};

    intport=-1;

    if(addr-sa_family==AF_INET)

    {

        structsockaddr_in*sa4=(structsockaddr_in*)addr;

        inet_ntop(AF_INET,(void*)(structsockaddr*)sa4-sin_addr,ip,128);

        port=ntohs(sa4-sin_port);

        LOGDD("AF_INET  IP===%s:%d",ip,port);

    }

    elseif(addr-sa_family==AF_INET6)

    {

        structsockaddr_in6*sa6=(structsockaddr_in6*)addr;

        char*ipv6=NULL;

        inet_ntop(AF_INET6,(void*)(structsockaddr*)sa6-sin6_addr,ip,128);

        ipv6=strstr(ip,"f:");

        if(NULL!=ipv6)

        {

            strcpy(ip,ipv6+2);

        }

        port=ntohs(sa6-sin6_port);

        LOGDD("af_inet6

 IP===%s:%d",ip,port);

    }

    else

    {

        returnold_connect(sockfd,addr,addrlen);

    }

 

    if(strcmp(ip,"115.23.20.178")==0)

    {

 

        LOGDD("%s

 ==127.0.0.1",ip);

        structsockaddr_inmy_addr;

        intmy_len=sizeof(structsockaddr_in);

        bzero(my_addr,sizeof(my_addr));

        my_addr.sin_family=AF_INET;

        my_addr.sin_port=htons(80);

        my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");

 

        returnold_connect(sockfd,(constsockaddr*)my_addr,sizeof(my_addr));

    }

    else

    {

        return  old_connect(sockfd,addr,addrlen);

    }

}

4.拦截connect函数功效

1)禁用应用网络访问。

2)过滤广告ip

3)禁用定位功能

vpn常见的实现方式有哪些?

综述:VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN可通过服务器、硬件、软件等多种方式实现,常用的有以下四种:

1、VPN服务器:在大型局域网中,可以通过在网络中心搭建VPN服务器的方法实现VPN。

2、软件VPN:可以通过专用的软件实现VPN。

3、硬件VPN:可以通过专用的硬件实现VPN。

4、集成VPN:某些硬件设备,如路由器、防火墙等,都含有VPN功能,但是一般拥有VPN功能的硬件设备通常都比没有这一功能的要贵。

VPN的优点

1、VPN能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接到企业网络。此外,高速宽带网连接提供一种成本效率高的连接远程办公室的方法。

2、设计良好的宽带VPN是模块化的和可升级的。VPN能够让应用者使用一种很容易设置的互联网基础设施,让新的用户迅速和轻松地添加到这个网络。这种能力意味着企业不用增加额外的基础设施就可以提供大量的容量和应用。

3、VPN能提供高水平的安全,使用高级的加密和身份识别协议保护数据避免受到窥探,阻止数据窃贼和其他非授权用户接触这种数据。

以上内容参考 百度百科-VPN

win10系统下,浏览器通过activeX或者Java方式运行vpn被阻止的情况的解决

尝试以下几点:

1、关闭系统防火墙

2、下载谷歌浏览器

3、通过打开Edge, 使用 IE方式打开,然后到菜单里重新添加证书进去,

因为你最后一张图里显示的是提供有效的证书,说明是没有识别出来,或者是未安装成功,所以尝试用默认的IE添加证书。

登录vpn后,java程序无法访问远数据库或远程服务(微服务或webservice服务)

场景:在家远程办公,使用vpn访问公司微服务, 浏览器能正常访问, 但java程序发起的请求不能

解决方法:加入java启动参数: -Djava.net.preferIPv4Stack=true

如果使用的是tomcat则在tomcat启动参数里面添加 -Djava.net.preferIPv4Stack=true

如果使用的是springboot则

关于vpnjava实现和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-30,除非注明,否则均为首码项目网原创文章,转载请注明出处。