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的原理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,094评论 0 8
  • 1、TCP状态linux查看tcp的状态命令:1)、netstat -nat 查看TCP各个状态的数量2)、lso...
    北辰青阅读 9,511评论 0 11
  • 1. OSI,TCP/IP,五层协议的体系结构,以及各层协议 OSI分层 (7层):物理层、数据链路层、...
    iCaptain阅读 2,501评论 0 4
  • 文/漂洋过海的鱼 你的声音 仿佛从另一个世界传来 我在这头 你在那头 那里有正酿的米酒 有被雨淹的青菜 有你语调轻...
    阳光在暗处起舞阅读 157评论 2 2
  • 截止今日,39天的假期已然结束。 此刻奔赴在离家的途中,一个多月来的点滴终要梳理,丢弃的丢弃,保留的保留,这样才能...
    启封阅读 209评论 0 0