PacketTunnelProvider

  • 开启tunnel, 调用startTunnelWithOptions:completionHandler方法
  • startProxy
    • startSS:开启的ss本地端口
    • startHttp:开启了privoxy
    • startSocksProxy:开启了AntinatServer
  • startPacketForwarders:开启NE提供的VPN.其中tunnel地址为192.0.2.2,这个tunnel工作在192.0.2.1,submask我255.255.255.0的子网内。TUN.
  • setupWormhole: 当app中启用刷新的时候,这个时候PacketTunnelProvider就会去读jcc.h中的log_clients. 然后把根据log_client的pointer去便利,读取每一个http请求的具体信息,通过Wormhole传tunnelConnectionRecords的信息给主app.然后主app进行刷新并将信息存入到UserDefault中
  • jcc.m:这个文件是对privoxy的jcc.c的修改。(看起来)主要的修改是在privoxy的chat的时候,将csp加到log中(line:1795, line 3345),如果这个时候要log的是response, 那么就加到等privoxy处理完response再log就可以了.
  • log_client_state:就是一个client_state的一个指针,单独的一个结构体,用来记录
  • privoxy介绍

shadowPath

  • jcc.h:在privoxy中加log的逻辑
  • project.h:包含了http_request的结构。因为我们最后要把request打印出来,所以用这个header.
  • AntinatServer:这里就是调用conf,开启一个antinatServer
  • shadowsocks:暴露了 start_ss_local_server等函数

其他原理文章

Antinat 配置

文档地址:http://www.malsmith.net/antinat/doc/antinat.xml.4/

  • interface 地址
  • port 端口(但是generateSocksConfig里面设置了一个0,不太清楚原因)
  • maxbindwait: 当有客户端连接到Antinat的时候,如果超过maxbindwait会报超时
  • authchoice:验证方式,可以选择必须是特定的ip和验证方式才可以验证,potatso这边选择anonymous,因为是自己和自己连接的
  • filter表示来源全部accept
  • chain表示将受到的socks5流量全部转发到ss中去。