Netguard项目源码解析

调用过程:

 ServiceSinkhole.start("prepared", this);
 onCreate()

 ServiceSinkhole中的native对应netguard.c中的方法

三次握手建立连接和四次握手断开连接:

根据关联tcp(udp)数据包信息获取发送数据包应用的信息

1  读取/proc/net/tcp或者/proc/net/udp内容。
2  根据source_ip、source_port、dest_ip、dest_port获取uid
3  根据uid获取ApplicationInfo,即可获取app信息

Selector介绍:

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,
并能够知晓通道是否为诸如读写事件做好准备的组件。
这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。
-----------
步骤:  
      1  创建Selector:
         Selector selector = Selector.open();
      2  向Selector注册通道:
          //通道必须使用非阻塞模式,FileSelector只能使用阻塞模式,所以通道不能和FileSelector一起使用。套接字通道可以是非阻塞模式。
         channel.configureBlocking(false);
         SelectionKey key = channel.register(selector,Selectionkey.OP_READ);

ServerSocketChannel

 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。

Vpn原理:

VPN的原理

你可能感兴趣的:(Netguard项目源码解析)