当前位置:首页>Linux>用Linux内核"拦截器"实时修改网络流量(C/C++代码实现)

用Linux内核"拦截器"实时修改网络流量(C/C++代码实现)

  • 2026-03-22 20:14:50
用Linux内核"拦截器"实时修改网络流量(C/C++代码实现)

想象这样一个场景:你是一个网络管理员,需要把经过网关的所有HTTP请求里的某个关键词替换掉;或者你在做安全测试,想实时修改传输中的数据包内容。传统的做法需要写复杂的内核模块或者用iptables做重定向,门槛很高。

nfq_sed就是为解决这类需求而生的。它是一个轻量级命令行工具,能在Linux系统上透明地修改经过的网络流量。你可以把它理解为网络世界的"查找替换"功能——就像你在Word里按Ctrl+H替换文字一样,只不过它操作的是网络数据包

和类似的工具netsed相比,nfq_sed有个独特优势:它支持在以太网桥(ethernet bridge)上工作,这意味着它可以保持源MAC地址不变,特别适合做透明代理或网关场景。


一、核心原理:Linux的"网络过滤器队列"

nfq_sed的名字里藏着它的核心技术:nfq(netfilter_queue)+ sed(流编辑器)。

1.1 Netfilter是什么?

Netfilter是Linux内核的网络过滤框架,也是iptables的底层基础。你可以把它想象成内核里的一排"检查站":

数据包流入 → [PREROUTING检查站] → [路由决策] → [FORWARD检查站] → [POSTROUTING检查站] → 发出
                    ↓                                        ↓
               本机进程接收                              转发到其他机器

传统的iptables只能决定"放行"或"丢弃",但Netfilter Queue(NFQUEUE)给了用户态程序一个"插手"的机会——它能把数据包复制一份送到用户空间,让用户程序检查、修改后再决定怎么处理。

1.2 工作流程图

┌─────────────────────────────────────────────────────────────────┐
│                         用户空间 (User Space)                      │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────────┐   │
│  │   iptables   │───→│  nfq_sed程序   │───→│  修改后的数据包   │   │
│  │  (规则匹配)   │    │ (查找替换payload)│   │  ( verdict回内核) │   │
│  └──────────────┘    └──────────────┘    └──────────────────┘   │
│           ↑                              ↓                      │
│           └──────────────────────────────┘                      │
│                    Netlink Socket通信                            │
└─────────────────────────────────────────────────────────────────┘
                              ↑↓
┌─────────────────────────────────────────────────────────────────┐
│                         内核空间 (Kernel Space)                    │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │              Netfilter Hook (NF_INET_FORWARD等)          │    │
│  │                      ↓                                  │    │
│  │              NFQUEUE目标 (数据包入队)                    │    │
│  │                      ↓                                  │    │
│  │              数据包复制到用户空间队列                     │    │
│  └─────────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────────┘

二、代码架构解析

...
intmain(int argc, char *argv[])
{
...
while ((opt = getopt(argc, argv, "vs:x:f:q:")) != -1) {
switch (opt) {
case'v':
                verbose = 1;
break;
case's':
                add_rule(optarg);
break;
case'x':
                add_hex_rule(optarg);
break;
case'f':
                load_rules(optarg);
break;
case'q':
                queue_num = atoi(optarg);
break;
default:
                usage();
        }
    }
if (!rules) {
fprintf(stderr"no rules defined, exiting\n");
return1;
    }
if (verbose) {
structrule_t *rule = rules;
printf("Rules (in hex):\n");
while (rule) {
printf("  ");
            print_rule(rule);
            rule = rule->next;
        }
    }
    read_queue();
return0;
}


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

nfq_sed的代码结构非常清晰,主要分为三大模块:

2.1 规则管理模块

structrule_t {
uint8_t *val1;      // 要查找的内容
uint8_t *val2;      // 替换成的内容
int length;         // 内容长度(val1和val2必须等长)
structrule_t *next;// 链表指针,支持多条规则
};

设计要点:

  • 使用单向链表管理多条替换规则
  • 支持字符串模式-s参数)和十六进制模式-x参数)
  • 查找值和替换值长度必须相同——这是为了避免修改后数据包长度变化导致的复杂问题(TCP序列号调整、分片重组等)

规则解析示例:

# 字符串规则:把"foo"替换成"bar"
-s /foo/bar

# 十六进制规则:把0x010203替换成0x414243(即ABC)
-x /010203/414243

2.2 数据包处理回调函数

这是整个程序的核心,代码精简但五脏俱全:

staticintcb(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
              struct nfq_data *nfa, void *data)

{
// 1. 获取数据包ID和原始数据
    ph = nfq_get_msg_packet_hdr(nfa);
    id = ntohl(ph->packet_id);
    len = nfq_get_payload(nfa, &payload);

// 2. 解析IP头部
    ip = (struct ip_hdr*) payload;
    ip_size = IP_HL(ip)*4;  // IP头部长度(单位:4字节)

// 3. 根据协议类型(TCP/UDP)计算传输层头部大小
if (ip->proto == IPT_TCP) {
        tcp = (struct tcp_hdr*)(payload + ip_size);
        proto_size = TH_OFF(tcp)*4;  // TCP头部长度
    } elseif (ip->proto == IPT_UDP) {
        udp = (struct udp_hdr*)(payload + ip_size);
        proto_size = TH_OFF_UDP;      // UDP头部固定8字节
    }

// 4. 定位到应用层payload
    proto_payload = (uint8_t*)(payload + ip_size + proto_size);

// 5. 遍历所有规则,执行查找替换
while (rule) {
while ((pos = find(rule, proto_payload, payload_length)) != NULL) {
memcpy(pos, rule->val2, rule->length);  // 原地修改
        }
        rule = rule->next;
    }

// 6. 重新计算校验和(关键!)
if (ip->proto == IPT_TCP) {
        tcp->sum = 0;
        tcp->sum = csum(IPT_TCP, len-ip_size, ip->src, ip->dst, (uint8_t*) tcp);
    } else {
        udp->sum = 0;
        udp->sum = csum(IPT_UDP, len-ip_size, ip->src, ip->dst, (uint8_t*) udp);
    }

// 7. 将修改后的数据包返回给内核,并放行
return nfq_set_verdict(qh, id, NF_ACCEPT, len, payload);
}

2.3 校验和计算

为什么必须重新计算校验和?

TCP和UDP都有头部校验和,用于检测传输过程中的数据损坏。当你修改了payload内容,校验和必然失效。如果不重新计算,接收方会丢弃这个数据包。

nfq_sed实现了伪头部校验和(Pseudo-header checksum):

伪头部组成:
┌─────────────────┐
│   源IP地址 (4字节) │
├─────────────────┤
│   目的IP地址 (4字节)│
├─────────────────┤
│   零 (1字节)     │
├─────────────────┤
│   协议号 (1字节)  │
├─────────────────┤
│   TCP/UDP长度(2字节)│
├─────────────────┤
│   TCP/UDP头部+数据 │
└─────────────────┘

代码中的csum()函数就是按RFC 1071标准实现的,采用** one's complement sum**算法。


三、关键设计思路与取舍

3.1 为什么只支持等长替换?

代码里有个硬性限制:val1val2长度必须相同。这不是偷懒,而是权衡后的设计:

方案
优点
缺点
等长替换
(nfq_sed选择)
实现简单、无序列号问题、性能高
灵活性受限
变长替换
更灵活
需要调整TCP序列号、处理分片、窗口缩放等,复杂度爆炸

对于大部分"关键字屏蔽"、"内容标记"场景,等长替换已经足够。

3.2 只处理TCP/UDP的Payload

代码里明确过滤了非TCP/UDP的包:

if (ip->proto != IPT_TCP && ip->proto != IPT_UDP) {
return nfq_set_verdict(qh, id, NF_ACCEPT, 0NULL);
}

这是因为:

  • ICMP、GRE等协议的修改逻辑完全不同
  • 大部分"应用层"修改需求都集中在TCP/UDP上
  • 保持代码简洁,避免过度工程化

3.3 链表 vs 数组

规则存储用了单向链表而不是数组:

  • 优点:动态添加规则,无需预分配内存
  • 缺点:查找是O(n),但规则数量通常很少(<100条),性能可忽略

四、使用场景与实战

4.1 基础用法

# 1. 先用iptables把流量引入NFQUEUE
# 例:把所有目的端口554的TCP包送入队列0
iptables -A FORWARD -p tcp --destination-port 554 -j NFQUEUE --queue-num 0

# 2. 启动nfq_sed进行替换
nfq_sed -s /foo/bar -s /good/evil

# 3. 查看详细日志
nfq_sed -v -s /old/new

4.2 从文件加载规则

适合规则较多的场景:

# rules.txt内容:
/foo/bar
/good/evil
/test/prod

nfq_sed -f rules.txt -v

4.3 十六进制模式

处理二进制协议或特殊字符:

# 替换HTTP/1.1为HTTP/1.0(十六进制)
nfq_sed -x /485454502f312e31/485454502f312e30

总结与思考

nfq_sed是一个小而美的网络工具,它展示了Linux网络栈的灵活性:

  1. 内核能力用户化:通过Netfilter Queue,普通用户程序也能"插手"内核网络流程
  2. 透明性:对通信双方无感知,不需要修改客户端或服务端配置
  3. 局限性:等长替换、仅支持TCP/UDP、单线程处理(可优化)

适合场景:网关内容过滤、安全测试、协议调试、透明代理。

不适合场景:高吞吐生产环境(需要多线程/零拷贝优化)、需要修改包长的场景、加密流量(HTTPS等需要先解密)。

理解nfq_sed的原理,不仅能帮你解决实际网络问题,更能深入理解Linux网络栈的工作机制——这对任何后端开发或运维工程师都是宝贵的知识储备。

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

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 09:55:59 HTTP/2.0 GET : https://f.mffb.com.cn/a/480831.html
  2. 运行时间 : 0.085059s [ 吞吐率:11.76req/s ] 内存消耗:4,920.59kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ae7c4bcec51da5e71e28eae49f556d5b
  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.000568s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000833s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000330s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000247s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000462s ]
  6. SELECT * FROM `set` [ RunTime:0.000215s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000562s ]
  8. SELECT * FROM `article` WHERE `id` = 480831 LIMIT 1 [ RunTime:0.000590s ]
  9. UPDATE `article` SET `lasttime` = 1774576559 WHERE `id` = 480831 [ RunTime:0.008906s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000260s ]
  11. SELECT * FROM `article` WHERE `id` < 480831 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000433s ]
  12. SELECT * FROM `article` WHERE `id` > 480831 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002284s ]
  13. SELECT * FROM `article` WHERE `id` < 480831 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001043s ]
  14. SELECT * FROM `article` WHERE `id` < 480831 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001255s ]
  15. SELECT * FROM `article` WHERE `id` < 480831 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000919s ]
0.086574s