当前位置:首页>Linux>深入浅出Linux内核级防火墙:IP/端口黑白名单的高性能实现

深入浅出Linux内核级防火墙:IP/端口黑白名单的高性能实现

  • 2026-01-31 19:23:19
深入浅出Linux内核级防火墙:IP/端口黑白名单的高性能实现

在Linux系统中,防火墙是网络安全的核心组件,而内核级防火墙相比用户态防火墙(如iptables用户态工具),能直接在网络数据包流经内核协议栈时进行处理,避免了用户态-内核态的频繁切换,具备更低的延迟和更高的吞吐量。本文将从核心概念、设计思路、实现原理等角度,拆解一款支持IP(单IP+CIDR网段)、端口(单端口+端口范围)黑白名单管控的低级Linux防火墙,理解内核态网络管控的核心逻辑。

一、先搞懂:这些核心概念到底是什么?

在看具体实现前,先把基础概念掰扯清楚,避免被专业术语绕晕:

1. 核心框架:Netfilter

Netfilter是Linux内核内置的网络数据包处理框架,相当于在内核的网络数据通路上预埋了多个“钩子点”(Hook Point)。我们可以把自己的过滤逻辑挂到这些钩子上,数据包经过时就会触发我们的代码——本文的防火墙就是把过滤逻辑挂在了NF_INET_PRE_ROUTING钩子点(数据包进入协议栈、路由决策前),优先级略高于连接跟踪(CONNTRACK),保证先做黑白名单过滤,再处理连接跟踪。

2. 关键数据结构(为什么选这些?)

  • Radix树(基数树):用来存单IP的黑白名单。Radix树是内核里专门做“键值对”快速查找的结构,单IP作为键(32位无符号整数),IP的黑白名单标记作为值,查一个IP是否在名单里的效率接近O(1),比链表遍历快得多。
  • 哈希链表+RCU:用来存CIDR网段(如192.168.1.0/24)。先通过哈希函数把网段的网络地址映射到哈希桶,再用链表存同一个桶里的CIDR规则;RCU(读-拷贝更新)是内核的并发安全机制,保证多CPU核同时读规则时不阻塞,写规则时不影响读。
  • 位图(Bitmap)+链表:用来存端口规则。端口号范围是0-65535,用位图的每2位分别标记一个端口是否在白名单/黑名单(比如第port<<1位标记白名单,port<<1 +1位标记黑名单),查端口是否命中规则只需一个位运算,速度极快;链表则用来记录端口范围(如4-55),方便规则的添加/删除。
  • Per-CPU缓存:内核每个CPU核都有独立的缓存,存最近匹配过的IP/CIDR规则,避免同一个IP每次都去查Radix树/哈希链表,进一步降低开销。

3. 内核态-用户态交互:ProcFS

ProcFS是Linux内核提供的伪文件系统(/proc目录),可以通过创建自定义的文件节点,让用户态程序(比如echo、cat)直接读写内核数据。本文的防火墙就是通过ProcFS创建了一系列文件节点,用户只需往/proc下的特定文件写规则(如echo "192.168.1.100" > /proc/xxx/ip_whitelist/add),就能动态添加/删除黑白名单,无需重启内核模块。

二、防火墙的核心设计思路

整体设计遵循“高性能、低开销、可动态配置”三个原则,核心架构分为三层:

graph TD
    A[用户态] -->|读写ProcFS文件| B[ProcFS交互层]
    B -->|解析规则/同步数据| C[规则存储层]
    C -->|提供匹配接口| D[数据包过滤层]
    E[网络数据包] -->|Netfilter钩子| D
    D -->|ACCEPT/DROP| F[内核协议栈后续处理]

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

核心决策逻辑

数据包进来后,防火墙按这个顺序判断,只要匹配到一条规则就立刻决策,不做多余检查:

  1. 先查是否命中CIDR黑名单 → 命中就丢弃(DROP);
  2. 再查是否命中单IP黑名单 → 命中就丢弃;
  3. 接着查是否命中CIDR白名单 → 命中就放行(ACCEPT);
  4. 再查是否命中单IP白名单 → 命中就放行;
  5. 如果是TCP/UDP包,查目标端口:
    • 命中端口白名单 → 放行;
    • 命中端口黑名单 → 丢弃;
  6. 以上都没命中 → 默认丢弃(可根据需求调整)。

补充:先查黑名单再查白名单,是为了保证“黑名单优先级更高”——比如一个IP既在白名单又在黑名单,最终会按黑名单处理。

三、核心实现原理拆解

1. 数据包拦截:Netfilter钩子注册

想要处理数据包,第一步是把我们的过滤函数挂到Netfilter的钩子上:

// 定义钩子操作结构体
staticconststructnf_hook_opsfw_ops = {
    .hook = fw_filter,       // 数据包过滤的核心函数
    .pf = NFPROTO_IPV4,      // 只处理IPv4数据包
    .hooknum = NF_INET_PRE_ROUTING, // 钩子点:路由前
    .priority = NF_IP_PRI_CONNTRACK + 1// 优先级:比连接跟踪高一点
};

// 初始化时注册钩子
voidfw_net_init(void){
    nf_register_net_hook(&init_net, &fw_ops);
}

这段代码的作用就是告诉内核:“凡是IPv4数据包经过PRE_ROUTING阶段时,先调用我的fw_filter函数处理”。

2. 核心过滤函数:fw_filter

这是数据包处理的核心逻辑,我们用大白话拆解关键步骤:

staticunsignedintfw_filter(void *priv, struct sk_buff *skb, const struct nf_hook_state *state){
structiphdr *ip_header = ip_hdr(skb);// 提取IP头
    u32 src_ip = ntohl(ip_header->saddr);  // 把网络序的源IP转成主机序
int ret;

// 第一步:跳过已建立连接的数据包(连接跟踪标记过的),提升性能
structnf_conn *ct = nf_ct_get(skb, &ctinfo);
if (ct) return NF_ACCEPT;

// 第二步:检查CIDR黑名单 → IP黑名单 → CIDR白名单 → IP白名单
    ret = ip_in_cidr_blacklist(src_ip);
if (ret) return NF_DROP;
    ret = ip_in_blacklist(src_ip);
if (ret) return NF_DROP;
    ret = ip_in_cidr_whitelist(src_ip);
if (ret) return NF_ACCEPT;
    ret = ip_in_whitelist(src_ip);
if (ret) return NF_ACCEPT;

// 第三步:处理TCP/UDP端口规则
if (ip_header->protocol == IPPROTO_TCP) {
structtcphdr *tcp_header = tcp_hdr(skb);
        u16 dst_port = ntohs(tcp_header->dest); // 提取目标端口
if (port_in_whitelist(dst_port)) return NF_ACCEPT;
if (port_in_blacklist(dst_port)) return NF_DROP;
    } elseif (ip_header->protocol == IPPROTO_UDP) {
// UDP端口处理逻辑和TCP一致
    }

// 都没匹配到,默认丢弃
return NF_DROP;
}

核心逻辑总结:先跳过已连接的包(避免重复过滤),再按“黑名单优先”的顺序查IP/CIDR规则,最后查端口规则,匹配到就立刻返回放行/丢弃。

3. 规则存储:不同场景选不同结构

(1)单IP规则:Radix树

Radix树的优势是“键值对快速查找”,适合单IP这种精准匹配的场景:

// 定义Radix树根节点
structradix_tree_rootip_tree;

// 初始化Radix树
voidfw_ip_init(void){
    INIT_RADIX_TREE(&ip_tree, GFP_KERNEL);
}

// 查找IP是否在白名单
intip_in_whitelist(u32 ip){
    ip_desc *desc = radix_tree_lookup(&ip_tree, ip); // 核心查找操作
if (desc && (desc->flags & IP_WHITELIST_MASK)) {
        this_cpu_write(ipcache, desc); // 写入Per-CPU缓存
return1;
    }
return0;
}

往Radix树加IP规则时,先查IP是否已存在:存在则更新标记,不存在则新建节点插入,保证规则不重复。

(2)CIDR规则:哈希链表+RCU

CIDR是网段匹配(比如192.168.1.0/24),先把网段的网络地址哈希到桶,再遍历桶里的链表找匹配的网段:

// 哈希桶数组,大小是2^16
#define bucket_num (1<<16)
structhlist_head *cidr_hash;

// 初始化哈希桶
voidfw_cidr_init(void){
    cidr_hash = kmalloc(bucket_num * sizeof(*cidr_hash), GFP_KERNEL);
for (int i = 0; i < bucket_num; i++)
        INIT_HLIST_HEAD(&cidr_hash[i]);
}

// CIDR匹配核心:先哈希,再遍历链表
intip_in_cidr_blacklist(u32 ip){
int i;
    u16 hash;
    cidr_desc *desc;
// 遍历已配置的CIDR掩码(从大到小,保证精准匹配优先)
for (i=0; i<32; i++) {
if (cidr_mask_array[i] == 0continue;
// 把IP按掩码截断,得到网段地址
        u32 cidr_ip = ip & ~((1<<cidr_mask_array[i]) -1);
        hash = hashfn(cidr_ip); // 哈希计算
        rcu_read_lock(); // RCU读锁,保证并发安全
// 遍历哈希桶里的链表
        hlist_for_each_entry_rcu(desc, &cidr_hash[hash], node) {
if (desc->ip == cidr_ip && (desc->flags & CIDR_BLACKLIST_MASK)) {
                rcu_read_unlock();
return1;
            }
        }
        rcu_read_unlock();
    }
return0;
}

这里有个小技巧:CIDR掩码按从大到小遍历(比如先/24再/16),保证小网段(更精准)优先匹配。

(3)端口规则:位图+链表

端口规则分“单端口”和“端口范围”,位图负责快速查询,链表负责存储范围规则:

// 位图:2*65536位 = 16KB,占用内存极小
staticlongunsignedint *port_bitmap;

// 初始化位图
voidfw_port_init(void){
    port_bitmap = bitmap_zalloc(1<<17, GFP_KERNEL); // 2^17位 = 16KB
}

// 快速判断端口是否在白名单(位运算,O(1))
intport_in_whitelist(u16 port){
return test_bit((port<<1), port_bitmap);
}

// 添加端口范围规则:遍历范围,设置位图
intinsert_port(void *p){
    port_desc *desc = p;
int start = desc->start;
int end = desc->end ?: start; // 单端口则start=end
if (desc->flags & PORT_WHITELIST_MASK) {
for (int i=start; i<=end; i++) {
            set_bit((i<<1), port_bitmap); // 设置白名单位
        }
    }
// 同时把范围规则存到链表,方便后续删除
// ... 链表插入逻辑 ...
return1;
}

位图的优势是“极致快”,查一个端口只需一次位运算,比任何链表/树都快;链表则是为了记录“范围”,避免删除时要遍历所有端口。

4. 用户态交互:ProcFS接口

为了让用户能动态配置规则,防火墙在/proc下创建了一套文件节点,比如:

  • /proc/xxx/ip/whitelist/add:往这里写IP,添加IP白名单;
  • /proc/xxx/cidr/blacklist/delete:往这里写CIDR,删除CIDR黑名单;
  • /proc/xxx/port/whitelist/show:读这个文件,查看端口白名单。

核心实现是注册文件操作函数(read/write),用户写数据时,内核解析数据(比如把“192.168.1.0/24”拆成IP和掩码),再调用对应的添加/删除函数;用户读数据时,内核把规则拼接成字符串返回给用户态。

这里要注意并发安全:用mutex锁保护规则的添加/删除,避免多进程同时写规则导致数据错乱。

四、核心知识点总结

这款内核级防火墙的实现,核心是把“Linux内核网络编程”的关键知识点落地,总结几个核心要点:

1. 性能优化的核心思路

  • 数据结构适配场景:精准匹配(单IP)用Radix树,网段匹配(CIDR)用哈希链表,端口匹配用位图——不同场景选最合适的结构,避免“一刀切”;
  • 减少冗余操作:Per-CPU缓存缓存最近匹配的规则,跳过已连接的数据包,减少重复计算;
  • 并发安全且高效:读规则用RCU(无锁读),写规则用Mutex(低冲突锁),兼顾并发安全和性能。

2. Netfilter使用的关键

  • 钩子点选择:PRE_ROUTING适合“路由前过滤”,能在数据包进入本地进程/转发前就处理;
  • 优先级设置:略高于连接跟踪(CONNTRACK),避免对已建立的连接重复过滤,提升性能;
  • 决策返回值:NF_ACCEPT(放行)、NF_DROP(丢弃)是Netfilter的核心返回值,决定数据包的命运。

3. 内核态编程的注意事项

  • 内存管理:内核态内存不能随意分配,要用kmalloc/kfree,且要指定分配标志(如GFP_KERNEL);
  • 并发安全:多CPU核、多进程操作同一数据时,必须用RCU/Mutex等机制保护,避免数据竞争;
  • 用户态-内核态交互:用copy_from_user/copy_to_user传输数据,不能直接访问用户态内存,避免内核崩溃。

五、应用场景与扩展思路

这款内核级防火墙适合轻量级、高性能、低延迟的网络管控场景,比如:

  • 嵌入式设备(路由器、网关)的网络访问控制;
  • 服务器的精准IP/端口黑白名单管控;
  • 高并发场景下的快速数据包过滤。

扩展方向也很明确:

  1. 支持IPv6:只需把IP的存储从32位改成128位,适配Radix树和哈希函数;
  2. 增强日志:记录过滤的数据包信息(源IP、端口、时间),输出到内核日志或用户态;
  3. 动态开关:添加全局开关,通过ProcFS控制防火墙的启用/禁用;
  4. 更细粒度的规则:支持按协议(ICMP/ICMPv6)、按网卡、按时间段过滤。

总结

Linux内核级防火墙的核心,本质是“利用内核原生框架(Netfilter)+ 适配场景的高效数据结构 + 安全的并发控制”,实现对网络数据包的快速管控。相比用户态防火墙,它少了用户态-内核态的切换开销,能在高并发场景下保持极低的延迟;而合理选择数据结构(Radix树、哈希、位图),则是保证过滤性能的关键。

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

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 19:57:45 HTTP/2.0 GET : https://f.mffb.com.cn/a/469848.html
  2. 运行时间 : 0.167687s [ 吞吐率:5.96req/s ] 内存消耗:4,572.77kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=2bd9c68ca3c800bf385545829468f38d
  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.000749s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000743s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000269s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000256s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000515s ]
  6. SELECT * FROM `set` [ RunTime:0.000212s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000570s ]
  8. SELECT * FROM `article` WHERE `id` = 469848 LIMIT 1 [ RunTime:0.000404s ]
  9. UPDATE `article` SET `lasttime` = 1770465465 WHERE `id` = 469848 [ RunTime:0.010175s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.002932s ]
  11. SELECT * FROM `article` WHERE `id` < 469848 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000445s ]
  12. SELECT * FROM `article` WHERE `id` > 469848 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000476s ]
  13. SELECT * FROM `article` WHERE `id` < 469848 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001337s ]
  14. SELECT * FROM `article` WHERE `id` < 469848 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.005291s ]
  15. SELECT * FROM `article` WHERE `id` < 469848 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002111s ]
0.169386s