1. 为什么Zeek不是“另一个Wireshark”而是网络流量的“审计员翻译官守门人”你刚接触网络安全时大概率是从Wireshark开始的——点开一个pcap文件看到密密麻麻的TCP、HTTP、DNS包靠颜色标记和过滤器硬着头皮找异常。我当年也是这样在客户现场抓了3小时包最后靠CtrlF搜“admin”“password”才揪出一个明文登录漏洞。但问题来了Wireshark再强它只是把原始字节流“原样摆出来”不解释、不归类、不判断——就像给你一车未经分类的快递包裹连收件人姓名都得你自己逐个拆封核对。Zeek原名Bro彻底换了一种思路它不满足于“看见”而要“读懂”“记账”“报警”。它把每一份网络流量当作一份待审阅的业务凭证——HTTP请求是“客户下单记录”SSH登录是“员工打卡日志”DNS查询是“前台问询登记表”。它自动提取关键字段源IP、目标IP、URL、User-Agent、响应码、文件哈希按协议语义结构化存入日志文件如http.log、ssh.log、files.log并内置数百条检测规则如可疑C2通信模式、暴力破解特征、恶意域名匹配。这不是简单的协议解析器而是一套运行在网络边界上的实时业务审计系统。这直接决定了它的使用场景和价值定位应急响应接到“某台服务器被黑”通知你不需要重放整个流量包只需查conn.log看连接关系、http.log看可疑下载、files.log看落地文件哈希5分钟内定位攻击链起点合规审计等保2.0要求“网络行为可追溯”Zeek生成的结构化日志天然适配SIEM平台如Elasticsearch、Splunk一条SQL就能查出“所有访问过境外IP的内部主机”威胁狩猎安全团队主动出击时用Zeek脚本定义“异常行为模式”如单IP在1小时内发起200次不同子域名的DNS查询系统自动标记并告警比被动等IDS报警快一个数量级。提示很多新手误以为Zeek是“高级版Wireshark”结果装完只会跑zeek -r trace.pcap看着一堆log文件发懵。根本区别在于Wireshark解决“这个包长什么样”Zeek解决“这个行为意味着什么”。入门第一步必须切换思维——从“抓包工程师”变成“网络行为分析师”。我见过太多团队踩坑花两周部署Zeek却只用它生成基础连接日志等于把审计员当成了复印机。真正发挥价值需要理解它的三层架构数据采集层Broker→ 协议解析层Analyzer→ 行为决策层Scripting。接下来我会带你一层层拆解不讲虚概念只说你在真实环境中会遇到的每一个开关、每一行配置、每一个报错背后的逻辑。2. Zeek安装不是“一键部署”而是三道必须跨过的“环境校验关”很多人照着官网文档执行./configure make make install结果卡在make阶段报错“找不到libpcap”或“C11不支持”。这不是Zeek的问题而是你的系统环境没通过它的“上岗体检”。Zeek对底层依赖极其严格尤其在CentOS 7/8、Ubuntu 18.04/20.04这些主流发行版上必须手动补全三类关键组件2.1 第一道关操作系统内核与编译工具链Zeek 5.x 要求GCC 7.0CentOS 7默认GCC 4.8.5Ubuntu 18.04默认GCC 7.5但需确认版本。实测发现即使GCC版本达标若未启用C11标准支持编译仍会失败。验证方法gcc --version # 必须≥7.0 g -stdc11 -dM -E -x c /dev/null | grep __cplusplus # 输出值应≥201103L若不达标CentOS 7需升级devtoolsetyum install centos-release-scl-rh yum install devtoolset-7-gcc devtoolset-7-gcc-c scl enable devtoolset-7 bash # 启用新工具链Ubuntu用户则需添加PPA源add-apt-repository ppa:ubuntu-toolchain-r/test apt update apt install gcc-9 g-9 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g g /usr/bin/g-92.2 第二道关网络抓包与加密库Zeek依赖libpcap捕获原始流量依赖OpenSSL解密TLS 1.2流量用于提取SNI、证书信息。常见陷阱是系统自带OpenSSL版本过低CentOS 7默认1.0.2kZeek 5.x要求1.1.1。错误做法是直接yum upgrade openssl——这会破坏系统基础服务sshd、curl等。正确方案是编译安装独立OpenSSLwget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar -xzf openssl-1.1.1w.tar.gz cd openssl-1.1.1w ./config --prefix/opt/openssl --openssldir/opt/openssl shared zlib make make install export LD_LIBRARY_PATH/opt/openssl/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH/opt/openssl/lib/pkgconfig:$PKG_CONFIG_PATH同时确保libpcap开发头文件已安装# CentOS/RHEL yum install libpcap-devel # Ubuntu/Debian apt install libpcap-dev2.3 第三道关Python与JSON支持Zeek 5.x强制要求Zeek 5.x移除了内置JSON解析器改用Python的json模块且要求Python 3.6。但问题在于系统Python如CentOS 7的Python 2.7无法满足而pip install zeek又不提供完整功能。必须指定Python路径编译# 安装Python 3.8 wget https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz tar -xzf Python-3.8.18.tgz cd Python-3.8.18 ./configure --enable-optimizations --prefix/opt/python38 make -j$(nproc) make altinstall /opt/python38/bin/python3.8 -m pip install --upgrade pip # 编译Zeek时指定Python路径 ./configure --with-python/opt/python38/bin/python3.8 make -j$(nproc) make install注意--with-python参数必须指向python3.x可执行文件而非python3.x-config。曾有同事填错路径编译成功但运行时报ImportError: No module named json排查3小时才发现是Python路径配置错误。安装完成后验证是否真能工作zeek -v # 应输出Zeek 5.x及Python版本 zeek -N # 列出所有可用分析器确认http、ssl、dns等核心模块存在如果zeek -N输出中缺少SSL::Analyzer或HTTP::Analyzer说明OpenSSL或Python链接失败——此时不要继续必须回溯检查第二、三道关。3. Zeek配置不是“改几个参数”而是构建一套“流量语义映射规则”安装成功后很多人直接运行zeek -i eth0看着current/目录下刷出一堆log文件就以为大功告成。但很快会发现http.log里全是404错误ssl.log里没有SNI字段files.log空空如也。问题根源在于——Zeek默认配置是“最小化安全模式”它只解析基础协议字段关闭了所有高价值语义提取功能。要让它真正成为“网络行为翻译官”必须手动激活三类关键配置3.1 协议深度解析开关让Zeek看懂应用层意图默认情况下Zeek对HTTP只记录method、host、uri但不会解析Cookie、User-Agent、Referer更不会提取X-Forwarded-For中的真实IP。开启方法是在local.zeek主配置文件中添加# 启用HTTP完整字段解析 redef HTTP::default_request_body_length -1; # 记录完整请求体含POST数据 redef HTTP::default_response_body_length -1; # 记录完整响应体 redef HTTP::extract_post_content T; # 解析POST表单内容 redef HTTP::log_cookies T; # 记录Cookie字段 redef HTTP::log_user_agent T; # 记录User-Agent redef HTTP::log_referer T; # 记录Referer redef HTTP::log_x_forwarded_for T; # 解析X-Forwarded-For并记录真实客户端IP对SSL/TLS流量关键是要开启SNI和证书提取# 启用SSL/TLS深度解析 redef SSL::enable_ssl_handshake_logging T; # 记录完整握手过程 redef SSL::enable_sni_logging T; # 提取Server Name Indication域名 redef SSL::enable_cert_logging T; # 记录证书Subject、Issuer、指纹 redef SSL::enable_ja3_fingerprinting T; # 生成JA3指纹识别客户端TLS栈实操心得redef语句必须放在load base/frameworks/communication之后否则会被覆盖。我曾因顺序错误配置生效但ssl.log仍无SNI字段最终发现是加载框架的顺序问题。3.2 流量采样与性能平衡避免Zeek变成“网络黑洞”Zeek默认对所有流量进行全量解析但在千兆以上链路这会导致CPU飙升、日志爆炸。必须根据实际需求做精准采样。例如你只需要监控Web服务器流量而非全部内网通信# 只对特定网段启用HTTP解析 redef Site::local_nets {192.168.1.0/24, 10.0.0.0/16}; # 定义本地网络范围 redef HTTP::use_local_addr F; # 不记录本地地址间的HTTP流量 # 或更精细地仅对目标端口80/443的流量启用HTTP解析 event zeek_init() priority5 { local http_ports {80, 443}; for (p in http_ports) { Analyzer::enable_analyzer(Analyzer::ANALYZER_HTTP, p); } }对于高吞吐场景还需限制日志字段# 减少http.log字段仅保留关键字段 redef Log::default_writer ascii; redef HTTP::log_http_fields { [ts] T, [uid] T, [id.orig_h] T, [id.orig_p] T, [id.resp_h] T, [id.resp_p] T, [trans_depth] T, [method] T, [host] T, [uri] T, [version] T, [status_code] T, [status_msg] T, [info_code] T, [info_msg] T, [filename] T, [tags] T, [username] T, [password] T, [proxied] T, [orig_mime_types] T, [resp_mime_types] T, };3.3 日志输出策略让结构化数据真正可用Zeek默认日志是TSV格式但直接导入SIEM平台常因字段缺失报错。必须统一时间戳格式并启用JSON输出# 统一时间戳为ISO8601格式兼容ELK redef Log::default_log_time_format %Y-%m-%dT%H:%M:%S.%f; # 启用JSON日志替代TSV redef Log::default_writer json; # 指定JSON日志路径避免与TSV混用 redef Log::default_log_path /nsm/zeek/logs; # 为每个日志类型设置独立输出 redef Log::default_rotation_interval 3600; # 每小时轮转一次 redef Log::default_rotation_size 100000000; # 每100MB轮转一次最关键的是日志压缩与归档否则磁盘3天就爆满# 启用gzip压缩 redef Log::default_writer json; redef Log::default_writer_json [ [output_format] json, [compress] T, [rotate_compress] T, ];踩坑实录某金融客户部署后http.log单日生成80GB未压缩文件导致NAS存储告警。排查发现compress参数未启用且rotate_compress设为F。修复后日志体积降至12GB压缩率85%。记住生产环境必须开启压缩这是底线。4. Zeek脚本不是“写代码”而是用领域语言定义“网络行为契约”很多安全工程师畏惧Zeek脚本觉得要学C或Python。其实Zeek脚本.zeek文件是一种高度领域化的声明式语言语法极简核心只有三类元素event事件、hook钩子、function函数。它的本质是为网络行为制定一套可执行的业务规则。下面用三个真实场景说明如何零基础写出有效脚本4.1 场景一检测“异常HTTP User-Agent”——识别扫描器与爬虫传统IDS靠签名匹配但新型扫描器如Nuclei、dalfoxUser-Agent伪装成Chrome。Zeek脚本能基于统计规律识别# 异常User-Agent检测脚本save as abnormal_ua.zeek module AbnormalUA; export { # 定义阈值单IP在5分钟内出现10个不同UA视为异常 const ua_threshold 10 redef; const time_window 300.0 redef; # 5分钟 } global ua_tracker: table[addr] of set[string] default {}; event http_request(c: connection, method: string, host: string, uri: string, version: string, user_agent: string) { if (user_agent || user_agent -) return; # 过滤空UA local ip c$id$orig_h; local now network_time(); # 初始化IP的UA集合 if (ip !in ua_tracker) ua_tracker[ip] set(); # 添加当前UA add ua_tracker[ip][user_agent]; # 清理超时UA只保留最近5分钟的记录 for (ua in ua_tracker[ip]) { if (now - ua_tracker[ip][ua] time_window) delete ua_tracker[ip][ua]; } # 检查UA数量是否超阈值 if (|ua_tracker[ip]| ua_threshold) { print fmt(ALERT: IP %s sent %d different User-Agents in %d seconds, ip, |ua_tracker[ip]|, time_window); # 写入告警日志 Log::write(AbnormalUA::LOG, [$tsnetwork_time(), $ipip, $ua_count|ua_tracker[ip]|]); # 可选阻断连接需配合iptables # event kill_connection(c); } }关键点解析table[addr] of set[string]是Zeek核心数据结构类似Python的dict[IP] set()用于存储每个IP的UA集合network_time()返回浮点数秒级时间戳精度远高于ts字段fmt()函数是Zeek内置字符串格式化比拼接更安全Log::write()将告警写入自定义日志需先定义AbnormalUA::LOG。4.2 场景二提取“可疑DNS请求”——发现C2通信特征攻击者常用DNS隧道传输数据表现为大量随机子域名查询。Zeek可基于域名熵值检测# DNS熵值检测脚本save as dns_entropy.zeek module DnsEntropy; export { const entropy_threshold 4.0 redef; # 熵值4.0视为高随机性 } function calculate_entropy(domain: string): double { local chars: table[string] of count {}; local total 0.0; # 统计字符频率 for (c in domain) { local char_str c; if (char_str !in chars) chars[char_str] 0; chars[char_str] 1; total 1.0; } # 计算香农熵 local entropy 0.0; for (char in chars) { local prob chars[char] / total; entropy -prob * log(prob) / log(2); } return entropy; } event dns_request(c: connection, query: string, qtype: count, qclass: count) { if (|query| 10) return; # 过滤短域名如google.com local entropy calculate_entropy(query); if (entropy entropy_threshold) { print fmt(DNS ALERT: High entropy domain %s (entropy%.2f), query, entropy); # 关联连接信息 Log::write(DnsEntropy::LOG, [$tsnetwork_time(), $queryquery, $entropyentropy, $src_ipc$id$orig_h, $dst_ipc$id$resp_h]); } }这里calculate_entropy()函数展示了Zeek脚本的计算能力——它不是简单匹配而是实时计算数学指标。实测中a1b2c3d4e5f6.g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6.example.com这类域名熵值达5.2而正常域名如www.google.com仅2.1。4.3 场景三关联“HTTP与SSL日志”——还原完整攻击链单看http.log或ssl.log都是碎片Zeek脚本可跨日志关联# HTTP-SSL关联脚本save as http_ssl_correlation.zeek module HttpSslCorrelation; global ssl_info: table[conn_id] of record { ssl_version: string, sni: string, cert_subject: string, } default {}; event ssl_server_hello(c: connection, version: count, server_name: string, cert_chain: vector[bytes]) { local id c$id; ssl_info[id] [$ssl_versionversion_to_string(version), $sniserver_name, $cert_subjectcert_subject_from_chain(cert_chain)]; } event http_request(c: connection, method: string, host: string, uri: string, version: string, user_agent: string) { local id c$id; if (id in ssl_info) { local ssl ssl_info[id]; print fmt(CORRELATION: HTTP %s %s - SSL v%s, SNI%s, Cert%s, method, uri, ssl$ssl_version, ssl$sni, ssl$cert_subject); # 写入关联日志 Log::write(HttpSslCorrelation::LOG, [$tsnetwork_time(), $http_methodmethod, $http_uriuri, $ssl_versionssl$ssl_version, $ssl_snissl$sni]); # 清理已关联记录避免内存泄漏 delete ssl_info[id]; } }这个脚本的关键是conn_id连接ID作为关联键它由c$id生成唯一标识一次TCP连接。通过ssl_server_hello事件捕获SSL握手信息再在http_request事件中匹配同一连接ID即可将加密层与应用层行为绑定。这是Zeek最强大的能力——跨协议语义融合。经验技巧Zeek脚本调试没有IDE全靠print和zeek -r trace.pcap script.zeek测试。建议在脚本开头加print Script loaded确认是否被加载用zeek -N | grep -i your_module检查模块是否注册成功。生产环境禁用print改用Log::write()写入专用日志。5. Zeek日志分析不是“查文件”而是用SQL思维驾驭结构化数据流Zeek生成的日志http.log、ssl.log等本质是带Schema的时序数据表每行是一个记录字段即列。与其用grep、awk硬解析TSV不如用专业工具直接查询。我推荐三套组合方案覆盖从单机分析到企业级平台5.1 方案一Zeek自带zeek-cut——命令行下的轻量SQLzeek-cut是Zeek内置的字段提取工具语法类似SQL的SELECT# 提取http.log中所有404错误的URI和User-Agent zeek-cut ts id.orig_h id.resp_h method host uri status_code user_agent http.log | \ awk $6404 {print $1,$2,$3,$4,$5,$6,$7,$8} # 更优雅的方式用zeek-cut直接过滤 zeek-cut ts id.orig_h id.resp_h uri user_agent status_code http.log | \ awk $5404 {print}但zeek-cut不支持复杂条件。进阶用法是结合zeekctl的log命令# 查询过去1小时所有访问/admin/login.php的请求 zeekctl log http | zeek-cut ts id.orig_h uri user_agent | \ grep admin/login.php | head -20 # 统计各IP的HTTP请求次数类似GROUP BY zeek-cut id.orig_h http.log | sort | uniq -c | sort -nr | head -105.2 方案二Elasticsearch Kibana——企业级可视化分析平台Zeek JSON日志天然适配ELK栈。关键配置在Logstash的zeek.confinput { file { path /nsm/zeek/logs/current/*.json start_position beginning sincedb_path /dev/null codec json } } filter { if [log_type] http { mutate { add_field { event.category web } add_field { event.action %{method} } rename { id.orig_h source.ip } rename { id.resp_h destination.ip } rename { uri url.path } rename { user_agent user_agent.original } } } } output { elasticsearch { hosts [http://localhost:9200] index zeek-%{YYYY.MM.dd} } }在Kibana中你可以用Lens图表展示“Top 10恶意User-Agent”用Discover搜索url.path : /wp-admin/*并查看关联的source.ip用Alerting创建规则“5分钟内同一IP触发3次403错误且User-Agent含sqlmap”。实操注意Zeek JSON日志的ts字段是浮点数如1698765432.123456ELK需在索引模板中定义为date_nanos类型否则Kibana时间轴显示异常。这是90%新手部署失败的根源。5.3 方案三Pandas Jupyter——数据科学家的威胁狩猎沙盒对安全研究员Python生态更灵活。用Pandas读取Zeek日志import pandas as pd import json # 读取压缩JSON日志Zeek默认gzip def read_zeek_log(file_path): with gzip.open(file_path, rt) as f: lines f.readlines() records [json.loads(line) for line in lines] return pd.DataFrame(records) # 加载http.log df_http read_zeek_log(/nsm/zeek/logs/current/http.log.gz) # 分析找出所有携带敏感参数的GET请求 sensitive_params [password, passwd, pwd, token, api_key] df_sensitive df_http[ df_http[uri].str.contains(|.join(sensitive_params), caseFalse, naFalse) ] print(df_sensitive[[ts, id.orig_h, uri]].head()) # 关联ssl.log提取对应SNI df_ssl read_zeek_log(/nsm/zeek/logs/current/ssl.log.gz) merged pd.merge(df_sensitive, df_ssl, left_on[id.orig_h, id.resp_h], right_on[id.orig_h, id.resp_h], howinner) print(merged[[ts_x, uri, sni]].head())这种分析方式能快速验证假设比如“所有访问/phpmyadmin/的请求其SNI是否都指向同一域名”答案往往暴露攻击基础设施。6. Zeek运维不是“重启服务”而是建立一套“流量健康度监控体系”Zeek上线后真正的挑战才开始如何确保它7×24小时稳定产出高质量日志我见过太多团队Zeek跑了半年某天突然发现http.log停止更新回溯发现是磁盘满了、进程僵死、或规则冲突。必须建立四层监控6.1 层级一进程与资源监控——守住底线用systemd管理Zeek进程确保崩溃自动重启# /etc/systemd/system/zeek.service [Unit] DescriptionZeek Network Security Monitor Afternetwork.target [Service] Typesimple Userzeek Groupzeek WorkingDirectory/nsm/zeek ExecStart/nsm/zeek/bin/zeek -C -i eth0 local.zeek Restartalways RestartSec10 LimitNOFILE65536 [Install] WantedBymulti-user.target关键参数-C禁用配置检查避免启动失败-i eth0指定监听接口。RestartSec10防止频繁重启。资源监控脚本check_zeek.sh#!/bin/bash # 检查Zeek进程是否存在 if ! pgrep -f zeek.*-i eth0 /dev/null; then echo CRITICAL: Zeek process not running! | mail -s Zeek Down adminexample.com systemctl restart zeek fi # 检查日志目录磁盘使用率 USAGE$(df /nsm/zeek/logs | awk NR2 {print $5} | sed s/%//) if [ $USAGE -gt 90 ]; then echo WARNING: Zeek logs disk usage ${USAGE}% | mail -s Zeek Disk Full adminexample.com # 自动清理7天前日志 find /nsm/zeek/logs -name *.log* -mtime 7 -delete fi6.2 层级二日志活性监控——验证数据质量Zeek可能进程在跑但日志不更新。用inotifywait监控日志文件变化# 监控http.log是否10分钟无更新 inotifywait -m -e modify /nsm/zeek/logs/current/http.log | \ while read path action file; do touch /tmp/zeek_http_last_update done # 每5分钟检查一次 while true; do if [ ! -f /tmp/zeek_http_last_update ] || \ [ $(($(date %s) - $(stat -c %Y /tmp/zeek_http_last_update))) -gt 600 ]; then echo CRITICAL: http.log inactive for 10 minutes! | mail -s Zeek Log Stale adminexample.com systemctl restart zeek fi sleep 300 done6.3 层级三规则有效性监控——确保检测不失效Zeek规则可能因协议变更失效。例如某条检测“永恒之蓝”的规则依赖SMBv1的特定字段但Windows Server 2016默认禁用SMBv1规则便永远不触发。需定期验证# 用已知攻击流量测试规则如ET Open规则集 zeek -r /test/eternalblue.pcap /opt/zeek/share/zeek/policy/frameworks/intel/intel-framework.zeek # 检查是否生成alert.log if [ ! -s /nsm/zeek/logs/current/alert.log ]; then echo WARNING: EternalBlue detection rule failed! | mail -s Zeek Rule Test Failed adminexample.com fi6.4 层级四网络拓扑监控——预防“看不见的流量”Zeek只能看到镜像流量或分光流量。若交换机镜像端口故障Zeek会安静地“失明”。必须监控流量输入# 每分钟统计eth0接收字节数 PREV_BYTES$(cat /sys/class/net/eth0/statistics/rx_bytes 2/dev/null) sleep 60 CURR_BYTES$(cat /sys/class/net/eth0/statistics/rx_bytes 2/dev/null) DIFF$((CURR_BYTES - PREV_BYTES)) if [ $DIFF -lt 1000000 ]; then # 1MB/s阈值 echo CRITICAL: Network input 1MB/s on eth0! | mail -s Zeek Input Low adminexample.com fi这才是完整的Zeek运维闭环进程活着 → 日志在写 → 规则有效 → 流量进来。少任何一环你的“网络审计员”就形同虚设。我在某省政务云项目中正是靠这套四层监控在一次核心交换机固件升级导致镜像中断2小时后第一时间收到告警并切换备用链路避免了安全盲区。Zeek的价值不仅在于它能做什么更在于你能否让它持续、可靠、可验证地做下去。
企业数字化 ERP 产品动态
相关推荐
OpenHarmony 4.0源码编译完整实践:从环境搭建到RK3568镜像 开篇:为什么我坚持要把OpenHarmony源码编译踩一遍说句实话,OpenHarmony这套系统和Android源码编译完全是两个世界。Android的编译体系经过十几年迭代,AOSP那套脚本早就被各种厂商打磨得相当顺滑,只要网络没问题、磁盘够大… · 2026/9/25 1:26:28
肖特基二极管AM检波电路设计:从选型到ADS仿真与实测 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:26:27
树莓派4B ARM架构安装WPS:Box64翻译层与字体修复实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:26:27
wheel-picker-cj 源码拆解:双 Scroll 同步实现滚轮吸附的底层原理 wheel-picker-cj 源码拆解:双 Scroll 同步实现滚轮吸附的底层原理 【免费下载链接】wheel-picker-cj 滚轮选择UI组件 项目地址: https://gitcode.com/Cangjie-TPC/wheel-picker-cj
wheel-picker-cj 是一款基于仓颉(Cangjie)语言开发的… · 2026/9/25 2:36:01
阿里云部署OpenClaw:79元/年搭24小时AI代理,TaoToken统一Key接入配置指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:36:01
Comp AI CRM 渲染性能实践:用 useTransition 取代手动加载状态,告别多余重渲染 后端前端CRM人工智能AI Agent 【免费下载链接】crm Comp AI CRM is an open source, CRM designed for AI agents. Agentic-first CRM. 项目地址: https://gitcode.com/gh_mirrors/crm48/crm 点击查看 免费下载 本指南基于 Comp AI CRM 仓库内置的 Vercel React 最… · 2026/9/25 2:35:55
hibase32-cj单元测试实战:仓颉@Test、@Expect与@AssertThrows测试宏完整教程 hibase32-cj单元测试实战:仓颉Test、Expect与AssertThrows测试宏完整教程 【免费下载链接】hibase32-cj Base32(RFC 4648)编码/解码库 项目地址: https://gitcode.com/Cangjie-TPC/hibase32-cj
hibase32-cj 是一个用仓颉(Cangjie)语言… · 2026/9/25 2:35:49
9层回退解析链:VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的? 9层回退解析链:VideoDownloadHelper的ParseVideo引擎是如何嗅探视频URL的? 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper … · 2026/9/25 2:35:49
路面病害数据集实战:从解压清洗到YOLOv8训练全流程 简介:面向道路病害检测与智能巡检场景,这份资料包提供了一套经过人工标注的道路病害标注数据,覆盖城市街道、高速公路、乡村道路、住宅区等多种道路场景,可用于道路病害的识别与定位。包内共2000个文件,主体为1998个XM… · 2026/9/25 2:35:49
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37