leevis.com
leevis.com copied to clipboard
Blog
### 概述 一些场景需要选择性的将指定部分的流量劫持到服务端。 例如,ssl vpn就是把客户机访问公司内网的流量劫持后通过加密隧道转到公司内网。  ### 原理 加密隧道可以用:`socks5 over tls` 实现。 如何进行流量劫持呢?有2种: 1. 使用操作系统代理。 2. 使用tun等虚拟网卡。 #### 使用操作系统代理 操作系统网络设置一般都支持代理,只需要把本地的socks5客户端监听端口配置到网络设置SOCKS代理就可以实现流量劫持。 一般只有浏览器才会使用这个代理,每个app都有自己配置socks代理的地方,不通用。  #### 使用tun虚拟网卡 TUN模拟了网络层设备,用户态可以直接读该tun设备,读到的数据是IP报文。如果要拿到payload就需要解析tcp/ip协议,有两种方案得到payload: 1. 使用操作系统的协议栈解析。 2. 用户态解析tcp/ip协议栈。 #####...
### 概述 ngx中http有11个阶段,其中有7个阶段可以添加模块,例如NGX_HTTP_ACCESS_PHASE和NGX_HTTP_CONTENT_PHASE阶段,这两个阶段有明显的先后顺序,先执行access阶段再执行content阶段。但是相同阶段的不同模块的执行顺序是什么样的呢?和什么有关系呢? ### 执行阶段 解析完请求行、请求头以后就会调用ngx_http_process_request函数,该函数又调用了ngx_http_handler,ngx_http_handler又调用ngx_http_core_run_phases执行http的10个阶段,代码如下。 ```c void ngx_http_core_run_phases(ngx_http_request_t *r) { ngx_int_t rc; ngx_http_phase_handler_t *ph; ngx_http_core_main_conf_t *cmcf; cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module); ph = cmcf->phase_engine.handlers; while (ph[r->phase_handler].checker) { rc = ph[r->phase_handler].checker(r,...