当前位置:首页>Linux>深入解析:一款能识别TLS流量特征的Linux内核连接跟踪模块

深入解析:一款能识别TLS流量特征的Linux内核连接跟踪模块

  • 2026-03-14 11:42:16
深入解析:一款能识别TLS流量特征的Linux内核连接跟踪模块

在HTTPS流量无处不在的今天,TLS协议成为网络通信安全的核心,但协议层面的漏洞(如当年的Heartbleed漏洞)和异常流量行为,往往给网络安全带来挑战。Linux内核的netfilter框架提供了强大的网络包处理能力,本文要介绍的这款实验性内核模块,正是基于netfilter实现的TLS流量智能解析工具——它能深度跟踪TLS连接状态,识别异常的TLS协议行为,为网络安全防护补上关键一环。

一、模块核心价值:不止是"看包",更是"懂TLS"

传统的网络包过滤(比如iptables)只能识别IP、端口、TCP状态等基础信息,对TLS加密流量内部的协议细节"视而不见"。而这款模块的核心能力,是穿透TLS记录层的封装,理解流量内部的TLS协议行为,主要解决三类问题:

  1. 防御TLS协议漏洞:比如识别并阻断Heartbleed(心脏滴血)漏洞利用行为;
  2. 检测异常加密流量:加密流量本应呈现随机特征,模块能识别出"伪装成加密流量的明文异常数据";
  3. 校验协议行为合法性:比如SSLv2握手消息必须遵循"客户端→服务端"或"服务端→客户端"的固定方向,违规则判定为异常。

简单说,它把TLS协议的"语义规则"植入到内核层的流量检测中,让内核能判断"这个TLS包是不是符合协议规矩",而不只是"这个包是不是发往443端口"。

二、先搞懂:TLS记录层是啥?(基础知识点)

要理解模块原理,先得明白TLS流量的最外层结构——TLS记录层: TLS协议的所有数据(握手、心跳、应用数据)都会被封装成"记录"传输,就像把不同类型的信件装进统一规格的信封:

  • TLS记录格式(RFC5246定义):1字节记录类型(比如22=握手、24=心跳)+2字节版本号+2字节数据长度+实际数据;
  • SSLv2记录格式(老旧但仍需兼容):格式更特殊,前1-2字节是长度(需掩码处理),还可能包含填充位,且和TLS记录格式不兼容;
  • 关键特点:记录可能被拆分到多个TCP包,也可能一个TCP包里包含多个TLS记录,这也是模块需要"状态跟踪"的核心原因。

另外两个关键知识点:

  • Heartbleed漏洞本质:TLS心跳请求和响应的长度必须严格一致,攻击者会构造"请求短、响应长"的心跳包,窃取服务器内存数据;
  • 加密流量的随机性特征:正常的TLS加密数据(非握手/心跳的应用数据)每个字节的最高位(第7位)应该随机0/1,若连续大量字节最高位为0(即值<128,比如ASCII字符、0值),则大概率是异常数据(比如把明文攻击数据伪装成加密流量)。

三、模块设计思路:用"状态机"跟踪TLS连接全生命周期

模块的核心设计是双向TLS状态机(客户端→服务端、服务端→客户端两个方向独立跟踪),整体逻辑可以总结为"先拆包,再判状态,最后验规则",具体分三步:

第一步:初始化与资源准备

模块加载时会做三件关键事:

  1. 分配内存:为每个CPU分配16KB的数据包缓冲区(处理大尺寸数据包/巨帧),用于临时存储线性化的TLS数据;
  2. 配置参数:比如"允许的连续低字节(<128)最大长度"(默认128)、监听的TLS端口(默认443,可自定义);
  3. 注册netfilter助手:把模块接入netfilter的连接跟踪(conntrack)框架,指定对TCP 443端口的流量进行处理。

第二步:核心逻辑——TLS状态机的流转(附简易流程图)

每个TLS连接会维护一个struct tls_state结构体,记录两个方向的处理状态,状态机的核心流转如下:

graph TD
    A[EXPECTING_NEXT_RECORD<br>等待下一个TLS/SSL记录] -->|收到第一个字节| B{判断记录类型};
    B -->|最高位=1(0x80)| C[READING_SSL_RECORD_HEADER<br>读取SSLv2记录头];
    B -->|次高位=1(0x40)| D[READING_SSL_PADDED_RECORD_HEADER<br>读取带填充的SSLv2记录头];
    B -->|TLS合法类型(20-24)| E[READING_TLS_RECORD_HEADER<br>读取TLS记录头];
    C & D -->|读完头,解析长度/类型| F{判断记录类型};
    E -->|读完5字节头,解析长度/类型| G{判断记录类型};
    F -->|SSL握手消息(客户端Hello等)| H[READING_CLEAR_RECORD<br>读取明文记录];
    F -->|其他SSL记录| I[READING_ENCRYPTED_RECORD<br>读取加密记录];
    G -->|心跳/握手记录| H;
    G -->|其他TLS记录| I;
    H & I -->|读完记录数据| A;
    H & I -->|未读完,继续读| H & I;

状态机的关键动作解释:

  1. 读取记录头阶段:不管是TLS还是SSLv2,先把记录头的所有字节读全(比如TLS头要读5字节),再解析"记录长度"和"记录类型"——因为记录头可能跨TCP包,必须攒够字节才能解析;
  2. 明文记录处理(READING_CLEAR_RECORD):比如握手、心跳记录,这类记录本身是明文,重点校验"协议规则"(比如心跳请求/响应长度是否一致、SSLv2 Hello消息方向是否正确);
  3. 加密记录处理(READING_ENCRYPTED_RECORD):比如TLS应用数据,重点做"随机性校验"——统计连续低字节(<128)的长度,超过阈值则判定为异常(数据走私)。

第三步:规则校验——触发阻断的核心逻辑

状态机运行过程中,一旦检测到以下违规行为,模块会标记包为异常(默认丢弃,可配置仅日志):

  1. Heartbleed检测
    • 收到心跳请求(客户端→服务端):记录请求长度,要求服务端响应的心跳包长度必须和请求一致;
    • 收到心跳响应:如果长度和之前记录的请求长度不一致,判定为Heartbleed攻击,阻断;
    • 心跳包长度小于19字节(协议最小长度),直接判定为异常。
  2. 异常加密流量检测: 遍历加密记录的每个字节,若连续多个字节最高位为0(值<128),且长度超过配置阈值(默认128),判定为"数据走私"(比如把明文攻击指令伪装成加密数据)。
  3. SSLv2方向校验: 比如"客户端Hello"消息只能出现在客户端→服务端方向,若在服务端→客户端方向收到,直接阻断。

四、代码实现的关键细节

1. 核心数据结构:tls_state

这个结构体是状态机的"账本",关键字段:

structtls_state {
// 两个方向(客户端→服务端/服务端→客户端)的处理状态
enum { ... } tls_processing_state[2];
// 存储正在读取的记录头(最多5字节,覆盖TLS头长度)
uint8_t record_header[2][5];
// 已读取的记录头字节数(比如读了2字节TLS头,值为2)
uint8_t record_header_read[2];
// 当前记录的类型(比如22=握手、24=心跳)
uint8_t record_type[2];
// 当前记录的总长度、剩余未读取的长度
uint16_t record_length[2], record_length_remaining[2];
// 连续低字节的计数(加密流量检测用)
uint16_t low_bytes_sequence_length[2];
// 待校验的心跳响应长度(Heartbleed检测用)
uint16_t heartbeat_response_length_pending[2];
};

核心是"[2]"——因为要同时跟踪连接的两个方向,互不干扰。

2. 核心函数:tls_ssl2_record_parser

这个函数是TLS解析的"大脑",输入是"当前连接状态+待解析的TLS数据+数据长度",输出是"是否异常":

  • 外层是while循环:只要还有未处理的数据,就一直解析;
  • 内层是switch-case:根据当前状态机状态,执行不同的处理逻辑(读头、解析长度、校验规则);
  • 关键宏定义:简化双向状态的访问,比如STATE_MEMBER(record_type)直接访问当前方向的记录类型,PEER_STATE_MEMBER(...)访问对端方向的状态。

3. netfilter接入逻辑:tls_helper

这个函数是模块和netfilter框架的"接口",负责从TCP包中提取TLS数据,再交给解析器处理:

  1. 从skb(内核网络包结构体)中解析TCP头,计算TLS数据在TCP包中的偏移量;
  2. 把分散的TLS数据线性化到缓冲区(解决TCP包分片问题);
  3. 调用tls_ssl2_record_parser解析数据,若返回异常则丢弃包(或仅日志);
  4. 兼容空TCP包(比如握手保活包),直接放行。
...
staticinttls_helper(struct sk_buff *skb, unsignedint protoff, struct nf_conn *ct, enum ip_conntrack_info ctinfo)
{
unsignedint data_offset, tls_packet_len;
int direction = CTINFO2DIR(ctinfo);
int ret;
structtls_state *tls_state = nfct_help_data(ct);
uint8_t *tls_packet;
structtcphdrtcp_header_data;
structtcphdr *tcp_header;
char *message;

if (NULL == tls_state) {
return NF_DROP;
 }

if (sizeof(struct tcphdr) >= skb->len) {
return NF_DROP;
 }

 tcp_header = skb_header_pointer(skb, protoff, sizeof(tcp_header_data), &tcp_header_data);
if (NULL == tcp_header)
return NF_DROP;

 data_offset = protoff + (tcp_header->doff * 4);
if (data_offset > skb->len) {
return NF_DROP;
 }
elseif (data_offset == skb->len) {
return NF_ACCEPT;
 }

 tls_packet_len = skb->len - data_offset;
do {
int parser_return;
int amount_to_read;

  amount_to_read = tls_packet_len;
if (amount_to_read > PACKET_BUFFER_LEN) {
   amount_to_read = PACKET_BUFFER_LEN;
  }

  ret = NF_ACCEPT;

  tls_packet = skb_header_pointer(skb, data_offset, amount_to_read, &get_cpu_var(packet_buffer));
if (NULL == tls_packet) {
return NF_DROP;
  }
  message = NULL;
  parser_return =
      tls_ssl2_record_parser(tls_state, &tls_parser_config, direction, tls_packet, tls_packet_len,
        &message);
if (parser_return) {
   ret = NF_DROP;
break;
  }

  tls_packet_len -= amount_to_read;
  data_offset += amount_to_read;
 } while (tls_packet_len);

if (message) {
  pr_debug("nf_conntrack_tls: dropping packet due to '%s'", message);
  nf_ct_helper_log(skb, ct, "nf_conntrack_tls: dropping packet due to '%s'", message);
 } elseif (NF_DROP == ret) {
  pr_debug("nf_conntrack_tls: dropping packet");
  nf_ct_helper_log(skb, ct, "nf_conntrack_tls: dropping packet");
 }

if (log_only_mode) {
  ret = NF_ACCEPT;
 }

return ret;
}

staticstructnf_conntrack_helpertls_helpers[MAX_PORTS][2] __read_mostly;

staticvoidnf_conntrack_tls_fini(void)
{
int i, j;
for (i = 0; i < ports_c; i++) {
for (j = 0; j < 2; j++) {
if (NULL == tls_helpers[i][j].me)
continue;

   pr_debug("nf_ct_tls: unregistering helper for pf: %d "
"port: %d\n", tls_helpers[i][j].tuple.src.l3num, ports[i]);
   nf_conntrack_helper_unregister(&tls_helpers[i][j]);
  }
 }
}

staticint __init nf_conntrack_tls_init(void)
{
int i, j = -1, ret = 0;

 packet_buffer = (char *)alloc_percpu(char[PACKET_BUFFER_LEN]);
if (!packet_buffer)
return -ENOMEM;

 tls_parser_config.max_low_bytes_sequence_length = suspicious_sequence_length;
if (0 == ports_c)
  ports[ports_c++] = HTTPS_PORT;

for (i = 0; i < ports_c; i++) {
  tls_helpers[i][0].tuple.src.l3num = PF_INET;
  tls_helpers[i][1].tuple.src.l3num = PF_INET6;
for (j = 0; j < 2; j++) {

   tls_helpers[i][j].data_len = sizeof(struct tls_state);
   tls_helpers[i][j].tuple.src.u.tcp.port = htons(ports[i]);
   tls_helpers[i][j].tuple.dst.protonum = IPPROTO_TCP;
   tls_helpers[i][j].expect_policy = &tls_exp_policy;
   tls_helpers[i][j].me = THIS_MODULE;
   tls_helpers[i][j].help = tls_helper;

sprintf(tls_helpers[i][j].name, "tls-%d", ports[i]);
   pr_debug("nf_ct_tls: registering helper for pf: %d "
"port: %d\n", tls_helpers[i][j].tuple.src.l3num, ports[i]);

   ret = nf_conntrack_helper_register(&tls_helpers[i][j]);
if (ret) {
    printk(KERN_ERR "nf_ct_tls: failed to register"
" helper for pf: %d port: %d\n", tls_helpers[i][j].tuple.src.l3num, ports[i]);
    tls_helpers[i][j].me = NULL;
    nf_conntrack_tls_fini();
return ret;
   }
  }
 }

return0;
}

module_init(nf_conntrack_tls_init);
module_exit(nf_conntrack_tls_fini);

If you need the complete source code, please add the WeChat number (c17865354792)

加载模块并配置iptables

1. 加载基础依赖模块

netfilter连接跟踪需要先加载核心模块:

# 加载连接跟踪核心模块
sudo modprobe nf_conntrack
# 查看是否加载成功(有输出则正常)
lsmod | grep nf_conntrack

配置iptables规则

模块需要通过iptables关联到443端口的流量,执行以下命令:

# 允许已建立的443端口TCP连接,并启用tls helper解析
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED -m helper --helper tls -p tcp --dport 443 -j ACCEPT

# 可选:查看iptables规则是否生效
sudo iptables -L INPUT -n --line-numbers

⚠️ 注意:测试阶段建议清空其他iptables规则,避免干扰,可执行sudo iptables -F清空所有规则后再执行上面的命令。

加载自定义TLS模块

# 加载编译好的模块
sudo insmod ./nf_conntrack_tls.ko

# 可选:自定义参数加载(比如修改可疑序列长度为256,开启仅日志模式)
sudo insmod ./nf_conntrack_tls.ko suspicious_sequence_length=256 log_only_mode=1

# 查看模块是否加载成功(有输出则正常)
lsmod | grep nf_conntrack_tls

# 查看模块参数(验证自定义参数是否生效)
sudo cat /sys/module/nf_conntrack_tls/parameters/suspicious_sequence_length
sudo cat /sys/module/nf_conntrack_tls/parameters/log_only_mode

五、设计亮点与领域知识点总结

这款模块不仅是TLS解析工具,更是内核态网络编程的典型实践,核心设计思路和知识点可总结为:

1. 状态机设计:解决"流式数据"的解析问题

TLS记录是基于TCP流的(可能跨包、分包),不能像解析单个UDP包那样"一次性解析"——状态机通过记录"已读多少字节、当前解析到哪一步",实现了对TCP流的"持续跟踪",这是所有流式协议(HTTP、TLS、SSH)内核解析的通用思路。

2. 双向独立跟踪:符合TCP连接的双向特性

TCP连接是全双工的,客户端→服务端和服务端→客户端的TLS流量相互独立,模块为每个方向维护独立的状态机,避免了"方向混淆"导致的解析错误——这是连接跟踪(conntrack)模块的核心设计原则。

3. 内核态处理的权衡:高效但需谨慎

模块运行在内核态,优势是处理性能极高(无需把包拷贝到用户态),但风险也更大(内核代码bug可能导致系统崩溃)——这也是作者强调"实验性模块,不建议生产环境直接使用"的原因。

4. 协议兼容性:兼顾新旧TLS/SSL版本

模块同时支持TLS(RFC5246)和SSLv2的记录格式,甚至处理了"SSLv2升级到TLS"的混合场景——体现了协议解析工具的核心要求:兼容历史版本,覆盖边缘场景。

六、延伸思考:这类模块的应用场景与局限

应用场景

  • 应急响应:比如针对Heartbleed这类协议漏洞,快速在内核层部署防护;
  • 内网安全审计:识别内网中异常的TLS流量(比如伪装成HTTPS的恶意流量);
  • 协议合规检测:确保内部服务的TLS交互符合协议规范,避免非标实现的安全隐患。

局限

  • 仅解析记录层:无法解密TLS应用数据(也不应该解密,违反隐私),只能基于记录层特征判断;
  • 实验性限制:内核态代码的稳定性、性能优化(比如DEBUG模式影响性能)、对新型TLS扩展的兼容,都需要进一步完善;
  • 安全权衡:内核层处理复杂逻辑,增加了内核攻击面,这也是"尽量不在内核层做复杂协议解析"的行业共识。

总结

这款模块的核心价值,是把"应用层的TLS协议语义"下沉到"内核层的流量检测"中,让Linux内核从"只懂网络层规则"升级为"懂应用层协议规则"。它的设计思路——状态机解析流式协议、双向独立跟踪、内核态高效处理——不仅适用于TLS,也是所有内核态协议解析工具的通用范式。

虽然它是实验性模块,但为我们展示了netfilter框架的强大能力,也让我们理解:网络安全防护的关键,从来不是"拦截多少包",而是"理解每个包的意义"。

Welcome to follow WeChat official account【程序猿编码

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 19:12:07 HTTP/2.0 GET : https://f.mffb.com.cn/a/480094.html
  2. 运行时间 : 0.255251s [ 吞吐率:3.92req/s ] 内存消耗:4,655.89kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0a4018476a88ca505445663ca8b29e6a
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000894s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001203s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002644s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.009955s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001130s ]
  6. SELECT * FROM `set` [ RunTime:0.003851s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001288s ]
  8. SELECT * FROM `article` WHERE `id` = 480094 LIMIT 1 [ RunTime:0.007779s ]
  9. UPDATE `article` SET `lasttime` = 1774609927 WHERE `id` = 480094 [ RunTime:0.031990s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000771s ]
  11. SELECT * FROM `article` WHERE `id` < 480094 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.006475s ]
  12. SELECT * FROM `article` WHERE `id` > 480094 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000637s ]
  13. SELECT * FROM `article` WHERE `id` < 480094 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007330s ]
  14. SELECT * FROM `article` WHERE `id` < 480094 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.024447s ]
  15. SELECT * FROM `article` WHERE `id` < 480094 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001051s ]
0.257742s