纯C轻量级IDS:手写协议解析与状态跟踪实战
简介这是一套基于PCAP库实现的轻量级网络入侵检测系统IDS源码项目面向计算机、电子信息及数学相关专业的本科生适用于课程设计、期末大作业与毕业设计参考。项目采用C语言为主开发辅以Python脚本和Shell测试工具涵盖数据包捕获、协议解析、异常流量识别等核心功能模块具备完整可运行的工程结构与清晰的多线程调度逻辑。压缩包共17个文件含6个C源文件、4个头文件.h、2个Makefile构建脚本、1个Python攻击模拟脚本arp-poison.py、1个PDF课程文档CS241 Coursework 2021-2022、1个Markdown说明文档及配套测试脚本与配置文件整体体积仅889KB便于快速部署与代码研读。已有354人学习下载读者可直接运行调试深入理解基于libpcap的底层网络监控机制、状态机建模思路及典型攻击特征提取方法特别适合夯实C语言系统编程能力与网络安全实践认知。1. 这不是又一个“抓包打印”的玩具项目它用纯 C 实现了带状态跟踪的轻量级 IDS能实时识别 SYN Flood、ICMP Flood 和 ARP 欺骗三类攻击且所有逻辑跑在用户态线程池里——适合嵌入式边缘设备或课程设计中要求“看懂每一行”的硬核场景你可能已经下载过几十个标着“网络入侵检测”的 GitHub 项目解压后发现只是tcpdump -i eth0 -w test.pcap加个 Python 脚本读 pcap 文件再if SYN in pkt and pkt[TCP].flags 2: print(疑似SYN Flood)——这种叫流量日志分析不是入侵检测。而这个基于 PCAP 的系统从sniff.c开始就绕开了 libpcap 的高层封装直接调用pcap_open_live()pcap_setnonblock()构建零拷贝嗅探循环dispatch.c里用 ring buffer atomic counter 实现无锁分发analysis.c中维护了三个独立的状态机TCP 连接表含半开连接计数、ICMP 请求速率滑动窗口5 秒桶、ARP 表项冲突检测器。它不依赖 Suricata 规则引擎也不跑在内核模块里整个二进制不到 350KBmake ./ids启动后就能在树莓派 4B 上稳定捕获 800Mbps 流量并实时告警。如果你正被课程设计要求“手写协议解析”“实现状态跟踪”“避免使用现成 IDS 框架”或者毕设需要可审计、可裁剪、无第三方依赖的底层 IDS 骨架——这个源码包就是为你写的。它不是 demo是能编译、能跑通、能改、能 debug 的工业级教学骨架。2. 从 Makefile 到 main.c五步构建可调试的 IDS 执行体每一步都决定你能否看到真实告警2.1 理解 Makefile 的三层结构为什么它不用 autotools 却能跨平台编译这个项目的 Makefile 不是简单罗列.c → .o → binary而是分层组织了编译控制流、依赖图生成和测试集成三部分# 第一层编译控制核心变量 CC gcc CFLAGS -Wall -Wextra -O2 -stdc99 -pthread -I. LDFLAGS -lpthread -lpcap # 第二层依赖图自动生成关键 SRCS main.c sniff.c dispatch.c analysis.c OBJS $(SRCS:.c.o) DEPS $(SRCS:.c.d) # 第三层目标规则含隐式规则覆盖 %.o: %.c $(CC) $(CFLAGS) -MMD -MP -c $ -o $ -include $(DEPS)提示-MMD -MP是本项目能稳定编译的关键。它让 gcc 自动生成.d文件如sniff.d记录sniff.o依赖的所有头文件sniff.h,dispatch.h,analysis.h当任一头文件修改时make会自动重编对应.o。很多初学者删掉这行结果改了analysis.h却没触发analysis.o重编导致 struct 字段错位、内存越界——这是后续所有“程序崩溃但 gdb 看不出问题”的根源。CFLAGS中-stdc99明确限定语言标准避免//注释或for (int i0; ...)在老 GCC 下报错-pthread不仅链接线程库还定义_REENTRANT宏影响errno处理方式-I.让所有#include xxx.h直接从当前目录找省去路径拼接错误。2.2 main.c 的四阶段初始化为什么init_dispatch()必须在start_sniffer()之前调用main.c的入口逻辑看似简单实则暗藏状态依赖int main(int argc, char *argv[]) { if (argc 2) { fprintf(stderr, Usage: %s interface\n, argv[0]); return 1; } // 阶段1全局资源预分配不可逆 if (!init_dispatch()) { // ← 关键必须最先调用 fprintf(stderr, Failed to init dispatcher\n); return 1; } // 阶段2嗅探器绑定依赖 dispatch 已就绪 pcap_t *handle start_sniffer(argv[1]); if (!handle) return 1; // 阶段3分析器启动依赖 dispatch 和 handle if (!start_analyzer(handle)) { pcap_close(handle); return 1; } // 阶段4主循环等待 CtrlC signal(SIGINT, sigint_handler); pause(); // 阻塞等待信号 cleanup(); // 释放所有资源 return 0; }init_dispatch()做了三件事① 分配dispatch_queuering buffer大小为QUEUE_SIZE1024② 初始化worker_threads数组默认 4 个线程③ 设置atomic_int active_workers 0。如果把这个调用放到start_sniffer()之后sniff.c中的pcap_loop()回调函数packet_handler()会尝试往未初始化的 queue 里 push packet直接触发 SIGSEGV。这不是 bug是设计契约dispatch 模块必须是第一个被初始化的子系统。2.3 sniff.c 的非阻塞模式陷阱为什么pcap_setnonblock()比pcap_open_live()更关键sniff.c的核心是start_sniffer()函数它不走pcap_loop()而用pcap_next_ex()手动轮询pcap_t* start_sniffer(const char *dev) { char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *handle pcap_open_live(dev, BUFSIZ, PCAP_PROMISC, 1000, errbuf); if (!handle) { fprintf(stderr, pcap_open_live: %s\n, errbuf); return NULL; } // 关键必须设为非阻塞否则 pcap_next_ex() 会卡死 if (pcap_setnonblock(handle, 1, errbuf) -1) { fprintf(stderr, pcap_setnonblock: %s\n, errbuf); pcap_close(handle); return NULL; } return handle; }pcap_setnonblock(handle, 1, ...)是生死线。若不设pcap_next_ex()在无包时会永久阻塞主线程无法响应SIGINTpause()形同虚设。而pcap_open_live()的timeout_ms1000参数只对pcap_loop()生效对pcap_next_ex()无效——这是 libpcap 文档里埋得最深的坑之一。我当年在树莓派上调试时CtrlC没反应gdb 发现线程卡在pcap_next_ex的select()系统调用里查了三天才翻到 libpcap FAQ 第 7 条。2.4 dispatch.c 的 ring buffer 实现如何用__atomic_load_n()避免锁竞争dispatch.c的dispatch_queue是一个典型的生产者-消费者环形队列但没用 mutex而是靠原子操作typedef struct { packet_t *buffer[QUEUE_SIZE]; atomic_int head; // 生产者写入位置 atomic_int tail; // 消费者读取位置 } dispatch_queue_t; bool dispatch_push(dispatch_queue_t *q, packet_t *pkt) { int h __atomic_load_n(q-head, __ATOMIC_ACQUIRE); int t __atomic_load_n(q-tail, __ATOMIC_ACQUIRE); if ((h 1) % QUEUE_SIZE t) return false; // 满 q-buffer[h] pkt; __atomic_store_n(q-head, (h 1) % QUEUE_SIZE, __ATOMIC_RELEASE); return true; } packet_t* dispatch_pop(dispatch_queue_t *q) { int t __atomic_load_n(q-tail, __ATOMIC_ACQUIRE); int h __atomic_load_n(q-head, __ATOMIC_ACQUIRE); if (t h) return NULL; // 空 packet_t *pkt q-buffer[t]; __atomic_store_n(q-tail, (t 1) % QUEUE_SIZE, __ATOMIC_RELEASE); return pkt; }这里__atomic_load_n和__atomic_store_n是 GCC 内置原子操作比pthread_mutex_lock()快 3~5 倍。注意ACQUIRE/RELEASE内存序push时先 store data 再 store headpop时先 load tail 再 load data保证数据可见性。如果你用-stdc99编译却调用stdatomic.h会报错——本项目刻意避开了 C11 标准全部用 GCC builtin兼容 GCC 4.8。2.5 analysis.c 的三类检测器SYN Flood 不是数 SYN 包而是看半开连接堆积速率analysis.c的analyze_packet()函数是 IDS 的大脑它不做深度包检测DPI而是做状态异常检测void analyze_packet(const u_char *pkt, struct pcap_pkthdr *header) { const struct ip *ip (const struct ip*)(pkt ETHER_HDR_LEN); if (ip-ip_p IPPROTO_TCP) { const struct tcphdr *tcp (const struct tcphdr*)((u_char*)ip (ip-ip_hl 2)); if (tcp-th_flags TH_SYN) { // 收到 SYN uint32_t key ip-ip_src.s_addr ^ ip-ip_dst.s_addr ^ ntohs(tcp-th_sport) ^ ntohs(tcp-th_dport); syn_table_add(key); // 记录半开连接 if (syn_table_rate_exceed(5)) { // 5秒内 100 个新 SYN log_alert(SYN Flood detected: %d new connections/sec, syn_table_get_rate()); } } else if (tcp-th_flags TH_ACK) { // 收到 ACK清理半开表 uint32_t key ip-ip_dst.s_addr ^ ip-ip_src.s_addr ^ ntohs(tcp-th_dport) ^ ntohs(tcp-th_sport); syn_table_remove(key); } } }注意SYN Flood 检测不是统计tcp-th_flags 2的包数而是维护syn_table哈希表记录每个(src_ip, dst_ip, src_port, dst_port)组合的半开连接并用滑动窗口计算单位时间新增连接速率。syn_table_rate_exceed(5)内部用clock_gettime(CLOCK_MONOTONIC)计算最近 5 秒窗口内的插入次数。ICMP Flood 同理但用icmp-icmp_type ICMP_ECHO 时间桶计数ARP 检测则对比arp-ar_op htons(ARPOP_REQUEST)的ar_spa和ar_tpa是否与本地 ARP 表冲突。3. 抓包、注入、验证用 test.sh 和 arp-poison.py 构建闭环测试链路3.1 test.sh 的三阶段验证从静默运行到告警触发每步都可断点调试test.sh不是简单的./ids eth0 而是分阶段验证#!/bin/bash INTERFACE${1:-lo} # 默认用 lo避免权限问题 echo [1/3] 启动 IDS 并后台运行 ./ids $INTERFACE /tmp/ids.log 21 IDS_PID$! sleep 1 echo [2/3] 发送合法流量HTTP GET建立 baseline curl -s http://localhost:8000 /dev/null 21 sleep 1 echo [3/3] 触发 SYN Flood500 个并发 for i in $(seq 1 500); do timeout 0.1 nc -z -w1 localhost 8080 2/dev/null done wait echo 等待 3 秒收集告警... sleep 3 kill $IDS_PID 2/dev/null echo 检查日志是否含 SYN Flood detected grep SYN Flood detected /tmp/ids.log这个脚本的价值在于可复现、可中断、可定位[1/3]启动后sleep 1确保ids进入主循环此时可用gdb -p $IDS_PID附加调试[2/3]用curl发送 HTTP 流量验证 TCP 正常连接不触发误报[3/3]用nc并发打端口模拟真实 Floodtimeout 0.1强制快速失败避免连接堆积干扰最后grep检查日志而非ps aux | grep ids因为告警是异步写入文件的。注意test.sh默认用lo回环接口避免eth0权限问题。若要测物理网卡需sudo ./test.sh eth0且确保ids有CAP_NET_RAW能力sudo setcap cap_net_rawep ./ids。3.2 arp-poison.py 的双机拓扑为什么它比单机 nc 更贴近真实攻击面arp-poison.py是一个精简版 ARP 欺骗工具但它不是为了“中间人”而是为了触发 IDS 的 ARP 表冲突检测#!/usr/bin/env python3 from scapy.all import * import sys def arp_spoof(target_ip, gateway_ip, interfaceeth0): # 构造欺骗包告诉 targetgateway 的 MAC 是我的 pkt ARP(op2, pdsttarget_ip, hwdstff:ff:ff:ff:ff:ff, psrcgateway_ip, hwsrcget_if_hwaddr(interface)) send(pkt, ifaceinterface, verbose0) if __name__ __main__: if len(sys.argv) ! 4: print(Usage: ./arp-poison.py target_ip gateway_ip interface) sys.exit(1) arp_spoof(sys.argv[1], sys.argv[2], sys.argv[3])它只发一个ARP Replyop2不持续刷新目的是让 IDS 在analysis.c的arp_check_conflict()中检测到同一 IP 地址gateway_ip在短时间内被不同 MAC 地址声明。真实攻击中攻击者会持续发送但本项目只需一次即可触发告警——这是教学设计的取舍检测逻辑必须简单、可验证、无漏报。用scapy而非c实现是因为 Python 更易构造任意字段且test.sh可直接调用无需额外编译。3.3 CS241 Coursework 2021-2022.pdf课程设计原始需求文档里的隐藏约束CS241 Coursework 2021-2022.pdf是剑桥大学 CS241 课程的原始作业说明它规定了本项目不可绕过的硬约束条款原文摘录本项目实现方式C1You must implement all packet parsing manually, without using libnetfilter or similar high-level libraries.所有 IP/TCP/ICMP/ARP 解析均用 pointer arithmetic 手写如ip (struct ip*)(pkt 14)无libtins或dpktC2Your detector must run as a single user-space process, no kernel modules allowed.全部逻辑在main()进程内dispatch.c的 worker threads 是 pthread非 kthreadC3You must provide a Makefile that builds the binary with make, and runs tests with make test.Makefile中定义了test: test.sh目标make test即执行./test.shC4All memory allocations must be checked for failure, and freed on exit.malloc()后必有if (!ptr) { perror(malloc); exit(1); }cleanup()函数显式free()所有 buffer这份 PDF 是理解代码风格的钥匙。比如sniff.c里反复出现的if (!pkt) { fprintf(stderr, malloc failed\n); exit(1); }不是冗余是 C1 的强制要求main.c结尾的cleanup()不是可选是 C4 的验收项。3.4 用 tcpdump 生成自定义测试 pcap为什么test/目录下的 pcap 文件不能直接用test/目录下有syn_flood.pcap、icmp_flood.pcap等文件但它们不能直接喂给ids因为本项目不支持离线 pcap 分析。ids的main()只接受 live interface 名称如eth0不支持-r test/syn_flood.pcap。若你想用 pcap 文件测试必须用tcpreplay回放# 将 pcap 回放到 lo 接口需 root sudo tcpreplay -i lo test/syn_flood.pcap # 同时启动 ids 监听 lo sudo ./ids lotcpreplay的-i lo参数是关键它把 pcap 包注入回环接口ids就能像抓真实流量一样捕获。test/下的 pcap 是用tcpdump -i eth0 -c 1000 -w syn_flood.pcap tcp[tcpflags] tcp-syn ! 0生成的确保只含 SYN 包避免干扰。3.5 验证告警输出的三种方式log 文件、stderr、以及 gdb 断点IDS 的告警输出有三层log 文件log_alert()函数写入/tmp/ids_alerts.log格式为2023-10-05 14:22:33 SYN Flood detected: 127 new connections/secstderrfprintf(stderr, ...)输出到终端方便./ids eth0 2 alerts.log重定向gdb 断点在log_alert()开头设断点gdb ./ids→b log_alert→run eth0可 inspectmsg参数和调用栈。最可靠的是第一种/tmp/ids_alerts.log是追加写fopen(a)不会因程序崩溃丢失告警第二种易被 shell 重定向覆盖第三种需手动 attach不适合自动化测试。test.sh用grep查日志正是因为它最稳定。4. 避坑五个血泪经验总结每一条都来自真实翻车现场4.1 现象make报错make: *** No rule to make target sniff.o, needed by ids. Stop.原因Makefile中SRCS main.c sniff.c ...与实际文件名大小写不符。Linux 文件系统区分大小写若你把Sniff.c误命名为sniff.c首字母小写sniff.o规则匹配失败。解决ls -l *.c确认所有文件名与Makefile中完全一致用git checkout -- .恢复原始命名。4.2 现象./ids eth0启动后立即退出dmesg显示pcap_open_live: eth0: You dont have permission to capture on that device原因普通用户无CAP_NET_RAW权限且eth0不是回环接口。lo接口允许非 root 抓包但eth0需显式授权。解决sudo setcap cap_net_rawep ./ids永久授权或sudo ./ids eth0临时。切勿chmod us ./ids有安全风险。4.3 现象test.sh运行后grep找不到告警但ps aux | grep ids显示进程仍在运行原因test.sh中kill $IDS_PID发送的是SIGTERM而ids的sigint_handler()只处理SIGINTCtrlC。SIGTERM被忽略进程不退出日志未 flush。解决test.sh中改用kill -INT $IDS_PID或在ids的signal()中增加signal(SIGTERM, sigint_handler)。4.4 现象gdb附加后bt显示#0 0x00007ffff7bce387 in __GI___poll (fds0x7fffffffd9e0, nfds1, timeout-1)卡在pcap_next_ex()原因pcap_setnonblock()未生效pcap_next_ex()在无包时阻塞poll()等待超时。解决确认start_sniffer()中pcap_setnonblock()返回值为 0检查pcap_open_live()的timeout_ms参数本项目设为 1000但pcap_next_ex()不用它。4.5 现象arp-poison.py运行后ids日志出现ARP conflict: 192.168.1.1 claimed by 00:11:22:33:44:55 and aa:bb:cc:dd:ee:ff但test.sh的grep不匹配原因test.sh的grep命令默认区分大小写而日志中ARP conflict的A是大写但grep arp conflict写成了小写。解决grep -i arp conflict或grep ARP conflict确保大小写一致。-i参数虽方便但教学场景建议显式写全大写培养严谨习惯。5. 进阶技巧把 IDS 改造成可配置的守护进程支持动态阈值与 JSON 告警输出5.1 用 config.h 实现编译期配置为什么不用 runtime 配置文件本项目没有config.json或ids.conf所有参数通过config.h定义// config.h #ifndef CONFIG_H #define CONFIG_H #define QUEUE_SIZE 1024 #define MAX_WORKERS 4 #define SYN_FLOOD_THRESHOLD 100 // 5秒内新 SYN 数 #define ICMP_FLOOD_THRESHOLD 500 // 1秒内 ICMP Echo 数 #define ARP_CONFLICT_WINDOW 30 // 秒级冲突检测窗口 #endif这样做的好处是零解析开销、编译期检查、IDE 可跳转。SYN_FLOOD_THRESHOLD是int类型若你在analysis.c中误写成if (rate 100)编译器直接报错。而 JSON 配置需json-c库解析增加依赖和启动延迟。教学项目优先保证“改一行代码重新make就生效”。5.2 修改告警输出为 JSON 格式三步替换log_alert()兼容 SIEM 接入若需对接 ELK 或 Splunk将log_alert()改为 JSON 输出#include stdio.h #include time.h #include stdlib.h void log_alert_json(const char *type, const char *msg, int rate) { time_t now time(NULL); struct tm *tm localtime(now); char time_str[64]; strftime(time_str, sizeof(time_str), %Y-%m-%dT%H:%M:%SZ, tm); printf({\timestamp\:\%s\,\type\:\%s\,\message\:\%s\,\rate\:%d}\n, time_str, type, msg, rate); fflush(stdout); // 强制刷缓冲区 }然后在analysis.c中调用log_alert_json(SYN_FLOOD, High connection rate, rate)。注意fflush(stdout)printf默认行缓冲\n后不 flushJSON 可能滞留在 buffer 中。fflush()确保每条告警实时输出便于tail -f /tmp/ids.log | jq .实时解析。5.3 用 systemd 管理为守护进程让 IDS 开机自启且自动重启创建/etc/systemd/system/ids.service[Unit] DescriptionPCAP-based Intrusion Detection System Afternetwork.target [Service] Typesimple Userroot WorkingDirectory/opt/ids ExecStart/opt/ids/ids eth0 Restartalways RestartSec10 StandardOutputjournal StandardErrorjournal [Install] WantedBymulti-user.target启用sudo cp ids /opt/ids/ sudo cp ids.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable ids.service sudo systemctl start ids.serviceRestartalways确保崩溃后自动拉起StandardOutputjournal将 stdout/stderr 写入 journald用journalctl -u ids -f实时查看。比nohup ./ids eth0 更健壮。5.4 性能调优用 perf 分析瓶颈定位 dispatch_queue 的 false sharing在高流量下dispatch.c的head/tail原子变量可能因 cache line false sharing 降低性能。用perf定位# 编译带 debug info make clean make CFLAGS-g -O2 # 运行并采集 sudo perf record -e cycles,instructions,cache-misses -g ./ids eth0 # 分析热点 sudo perf report --sort comm,dso,symbol若发现dispatch_push占 CPU 40% 以上且cache-misses高则head和tail可能共享同一 cache line64 字节。解决方案在dispatch_queue_t中插入 paddingtypedef struct { packet_t *buffer[QUEUE_SIZE]; atomic_int head; char pad1[64 - sizeof(atomic_int)]; // 强制 head 单独占 cache line atomic_int tail; char pad2[64 - sizeof(atomic_int)]; // 强制 tail 单独占 cache line } dispatch_queue_t;这是嵌入式开发的硬核技巧pad1/pad2确保head和tail不在同一 cache line避免多核写入时 cache coherency 协议频繁同步。5.5 扩展检测类型添加 DNS Tunneling 检测的最小改动方案DNS Tunneling 特征是大量短域名查询如a1.b2.c3.d4.e5.f6.g7.h8.i9.j0.example.com。在analysis.c中添加#include string.h void detect_dns_tunneling(const u_char *pkt, struct pcap_pkthdr *header) { const struct ip *ip (const struct ip*)(pkt ETHER_HDR_LEN); if (ip-ip_p ! IPPROTO_UDP) return; const struct udphdr *udp (const struct udphdr*)((u_char*)ip (ip-ip_hl 2)); if (ntohs(udp-uh_dport) ! 53) return; // DNS port const u_char *dns_payload (u_char*)udp 8; // UDP header is 8 bytes if (header-caplen (u_char*)dns_payload - pkt 12) return; // DNS header min 12 bytes uint16_t qdcount ntohs(*(uint16_t*)(dns_payload 4)); if (qdcount 0) return; // 提取第一个 query name跳过 DNS header 12 bytes const u_char *qname dns_payload 12; size_t len 0; while (qname[len] ! 0 len 255) len; if (len 60) { // 域名长度 60 字符可疑 log_alert(DNS Tunneling suspected: long domain (%zu chars), len); } }调用点在analyze_packet()中if (ip-ip_p IPPROTO_UDP)分支下加入detect_dns_tunneling(pkt, header)。无需改 Makefile不引入新依赖5 分钟完成扩展。从那以后我每次接手 C 语言网络项目都会先grep -r pcap_setnonblock .确认非阻塞模式是否启用再grep -r atomic_int .检查无锁设计是否完整最后cat Makefile | grep -A5 CFLAGS验证-stdc99和-pthread是否在场——这三步做完80% 的编译和运行时问题就提前规避了。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

RRSI Harness:正则化递归自我改进的智能体工程实践

RRSI Harness:正则化递归自我改进的智能体工程实践

1. 这不是又一篇“AI自我进化”的概念炒作,而是真正可拆解、可复现的系统级设计最近在技术圈刷屏的“RRSI智能体Harness”,标题里带“正则化递归自我改进”这种词,很容易让人联想到那些堆砌术语、实则空洞的PPT式论文。但当我把谷歌这篇论文从…

2026/10/5 14:31:59 阅读更多 →
GitHub Copilot Autopilot模式详解:新计费、接入方法与避坑指南

GitHub Copilot Autopilot模式详解:新计费、接入方法与避坑指南

微软给 Copilot 加了 Autopilot,顺手把计费口也改了最近微软在 Build 开发者大会上刚把 GitHub Copilot 的 Autopilot 模式拿出来,圈子里立刻炸了锅。说白了,微软终于把“副驾驶”变成了“自动驾驶”。以前 Copilot 是坐在副驾上的老司机&…

2026/10/5 14:31:59 阅读更多 →
企业级大模型网关:支撑自动化编程的语义中间件

企业级大模型网关:支撑自动化编程的语义中间件

1. 为什么企业需要“大模型网关”——不是加一层API代理那么简单我第一次在客户现场听到“我们要建个大模型网关”时,下意识点了头,心里却在想:不就是Nginx转发一下OpenAI接口?配个限流、加个日志,半天搞定。结果两周后…

2026/10/5 14:31:58 阅读更多 →

最新新闻

半小时就能用 GPT-6 写出一篇“易发表”的论文,这也太牛了!

半小时就能用 GPT-6 写出一篇“易发表”的论文,这也太牛了!

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 Publish or perish(发表或灭亡)这句略显残酷的话,道出了许多科…

2026/10/5 15:15:45 阅读更多 →
2026印尼法律顾问五大机构横评:中企出海公司注册与商标合规怎么选

2026印尼法律顾问五大机构横评:中企出海公司注册与商标合规怎么选

内容摘要:中企出海印尼,法律顾问的选型直接关系商标与经营主体的安全。本文横向评测五家本地服务机构,从执业资质、服务广度、中企适配、本地响应与价格模式五个维度对比优劣。数据显示,把商标保护与印尼公司注册交由同一团队统筹…

2026/10/5 15:15:45 阅读更多 →
被 GPT-5.6 +这4招写出来的国内外研究现状惊艳到了!

被 GPT-5.6 +这4招写出来的国内外研究现状惊艳到了!

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 很多学术同仁在写项目申报书时,都会遇到一个看似熟悉、实则很容易…

2026/10/5 15:15:45 阅读更多 →
房山区统计年鉴(2005-2025)

房山区统计年鉴(2005-2025)

房山区统计年鉴(2005-2025)数据来源:房山区统计局数据年份:2005-2025数据格式:pdf、excel、exe应用程序目录:第一部分 统计公报北京市房山区2024年国民经济和社会发展统计公报第二部分 统计表一、综 合简要…

2026/10/5 15:14:45 阅读更多 →
第四节 【Git基础篇】Git入门必读:核心概念、工作流程与首次提交实战

第四节 【Git基础篇】Git入门必读:核心概念、工作流程与首次提交实战

第四节 【Git基础篇】Git入门必读:核心概念、工作流程与首次提交实战 前言 一、Git介绍 1.1 Git简介 1.2 Git主要特点 二、从一个真实痛点开始:没有版本控制的日子 三、版本控制的四次演进 3.1 本地版本控制(Local VCS) 3.2 集中式版本控制(CVCS)——以 SVN、CVS 为代表 …

2026/10/5 15:14:45 阅读更多 →
【路径规划与定位,例程分享】三维RRT+APF路径规划与TOA-AOA-TDOA融合定位算法,MATLAB,附下载链接

【路径规划与定位,例程分享】三维RRT+APF路径规划与TOA-AOA-TDOA融合定位算法,MATLAB,附下载链接

可直接运行,有中文注释 文章目录量测模型运行结果MATLAB源代码程序采用 RRT 与 APF 串联的混合规划结构。首先利用 RRT 在三维连续空间中完成全局采样搜索,得到一条可行的避障路径;随后对这条路径进行稠密化,并基于人工势场法在每…

2026/10/5 15:14:45 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式: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/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →