解密GoBruteforcer:AI如何助长僵尸网络利用弱密码攻击加密资产
关键要点
- GoBruteforcer(也称GoBrut)是一个用Go语言编写的模块化僵尸网络,专门对Linux服务器上的FTP、MySQL、PostgreSQL和phpMyAdmin等服务进行用户密码暴力破解。它通过网页后门、下载器、IRC僵尸程序和暴力破解器这一链条进行传播。
- 当前的攻击浪潮主要由两个因素驱动:AI生成的服务器部署示例被大量复用,导致通用用户名和弱默认设置广泛传播;以及XAMPP等遗留Web软件栈的持续存在,这些软件栈暴露了FTP和管理界面,且安全性加固不足。
- 根据我们的估计,超过50,000台面向互联网的服务器可能容易受到GoBruteforcer的攻击。
- 我们观察到一次针对加密货币和区块链项目数据库的GoBruteforcer攻击活动。在一台被入侵的主机上,我们发现了Go语言工具、一个TRON余额扫描器、TRON和BSC的“代币归集”工具,以及一个包含约23,000个TRON地址的文件。对涉及僵尸网络操作者收款钱包的链上交易分析显示,这些以经济利益为目的的攻击至少部分是成功的。
引言
GoBruteforcer是一个将受感染的Linux服务器转变为扫描和密码暴力破解节点的僵尸网络。它攻击暴露在互联网上的服务,如phpMyAdmin网页面板、MySQL和PostgreSQL数据库以及FTP服务器。受感染的主机被纳入僵尸网络,并接受远程操作者指令。新发现的弱密码被用于窃取数据、创建后门账户、出售访问权限以及扩大僵尸网络。
恶意工具包通常分为两部分。第一部分是一个IRC僵尸程序,用于远程控制被入侵的主机,包括执行命令和更新。第二部分是一个暴力破解器,随后被获取,用于扫描随机的公网IP地址段,并尝试使用硬编码或由命令与控制(C2)服务器提供的凭据进行登录。
该僵尸网络于2023年首次公开描述。2025年中,我们开始观察到更复杂的GoBruteforcer变种在野外活动。这个新变种引入了高度混淆的IRC僵尸程序(完全用Go重写)、改进的持久化机制、进程伪装技巧以及服务器动态凭据列表。
本文总结了我们对2025年变种的了解,重点介绍其新功能,并对配置不当的服务器、弱密码和AI辅助的DevOps工作流程提供更广泛的背景分析。
攻击面
数百万的数据库和文件传输服务器在其默认端口上面向公众可访问。来自Shodan(一个用于搜索互联网连接设备和服务的搜索引擎)的最新数据显示,大约有570万台FTP服务器、223万台MySQL服务器和约56万台PostgreSQL服务器暴露在互联网上。
图1 — 默认端口上公开可访问的MySQL服务器数量(来源:Shodan搜索)
这些服务,连同数以万计的phpMyAdmin面板,构成了GoBruteforcer的主要攻击面。
我们将GoBruteforcer活动中使用的凭据列表与一个包含约1000万个泄露密码的数据库进行了比较,发现重叠率约为2.44%。这为我们提供了一个大致的上限基线,估算可能接受GoBruteforcer可支配的密码之一的主机数量:大约54,600个MySQL实例和13,700个PostgreSQL实例(请注意,此估计未考虑正确的用户名、基于主机的访问限制或其他策略控制)。即使成功率很低,大量暴露的服务也使此类攻击成为一个经济上有吸引力的选择。我们的假设得到了Google 2024年云威胁地平线报告的支持,该报告发现弱凭据或缺失凭据占云表面入侵初始访问向量的47.2%。在实践中,攻击者无需昂贵的技术或零日漏洞即可获得访问权限。他们可以简单地尝试常见的用户名和密码,如admin、123456或password1,直到获得访问权限(暴力破解模式)。证据表明,这种方法仍然过于频繁地取得成功。
当前攻击浪潮的驱动因素
为了使GoBruteforcer成功,攻击者不仅要猜出弱密码,还要猜出一个允许远程登录的有效用户名。在对该僵尸网络的监控中,我们观察到真实的GoBruteforcer攻击在其暴力破解凭据列表中使用常见的操作用户名,如 appuser 和 myuser:
图2 — GoBruteforcer C2为暴力破解任务下发的凭据列表示例
这些名称在攻击中被使用并非偶然。大多数名称多年来在数据库教程、供应商文档和社区问答中作为便捷示例流传,其中许多被复制到生产环境中。
大语言模型(LLMs)基于这些相同的公共文档和示例代码进行训练。因此,它们经常生成带有流行默认用户名(如appuser和myuser)的相同配置样本也就不足为奇了。我们请两个主流LLM帮助我们创建一个Docker中的MySQL实例。两者都生成了几乎相同的代码片段,且带有现成的用户名模式:
图3 — 不同模型为在Docker中部署MySQL生成的示例代码片段
AI明显提升了生产力并降低了入门门槛:一个几乎没有操作经验的人可以使用AI助手在几分钟内创建一个Docker数据库服务器。然而,盲目遵循AI提供的指令会带来安全风险,因为这会导致在生产环境中更广泛地使用带有通用用户名的标准配置。虽然我们不认为GoBruteforcer专门针对AI辅助的服务器安装,但LLM的广泛使用可能会使僵尸网络的攻击更加成功。
GoBruteforcer攻击的第二个驱动因素是XAMPP等遗留的Web服务器软件栈,它们仍然为大量网站提供支持。这些安装通常附带预装的FTP服务器和默认凭据(通常是管理员不知情的),这些相当于一个等待被利用的功能性后门。
攻击模式和目标选择
GoBruteforcer攻击四种服务类型:FTP、MySQL、PostgreSQL和phpMyAdmin。
C2服务器决定攻击哪种服务,并传输一个包含200个凭据的列表用于暴力破解攻击。攻击配置文件(包括目标和用户名密码集)每周轮换几次。在一次攻击活动中,每次任务特定的密码列表都是从一个相对较小的数据库中(通常包含375–600个常用弱密码)新创建的。
我们观察到广泛的“喷洒式”攻击和更有针对性的攻击。在通用的“喷洒式”攻击中,僵尸网络操作者使用一个常见的操作用户名列表(php、operator、appuser、john、api、newuser、dbo、service、web、guest、myuser等)和一个标准的弱密码库,有时还会加上轻微的用户名风格变体(例如appuser1234或operatoroperator)。
一些攻击任务明显是针对特定行业的。例如,我们观察到一次攻击使用了加密货币主题的用户名,如cryptouser、appcrypto、crypto_app和crypto。在这些攻击中,使用的密码将标准的弱密码列表与特定于加密货币的猜测(如cryptouser1或crypto_user1234)结合在一起。
其他攻击活动针对通常与WordPress站点关联的phpMyAdmin面板。这些攻击使用一个简短的用户名列表:root、wordpress和wpuser。攻击者用WordPress风格的变体(如wordpress、wordpress123和wpuserwpuser)来补充常见的弱密码集。
我们还观察到专注于用户名的攻击,将完整的密码池应用于单个用户名(如appuser或root)。不同的单用户名任务分布在僵尸网络中,因此很可能并行测试了许多账户名。
总而言之,攻击者为每次攻击活动重复使用一个稳定的小密码池,从该池中刷新每次任务的列表,并每周轮换用户名和特定领域的补充项数次,以追求不同的目标。
与其他服务不同,FTP暴力破解使用一个小型的、硬编码的凭据集合,该集合嵌入在暴力破解器二进制文件中。这个内置集合指向Web托管堆栈和默认服务账户,因为许多用户名和密码映射到捆绑发行版(特别是XAMPP)和常见Web服务器部署(例如apache、daemon、http、www、wordpress风格的条目)使用的已知默认值。
攻击者可以利用发现的弱密码进一步传播僵尸网络(这在成功入侵WordPress的情况下可能实现),并从被入侵的数据库中窃取敏感数据以及出售访问权限。
操作流程
我们分别在野外和专用蜜罐中观察到了GoBruteforcer的活动。我们收集的数据显示了在攻击活动和蜜罐捕获中反复出现的常见初始访问模式。
攻击链见下图:
图4 — GoBruteforcer感染链
初始访问
一个值得注意的初始入侵途径是运行XAMPP的服务器上暴露在互联网的FTP。XAMPP是一个广泛使用的、易于安装的Apache产品,它捆绑了Apache、MySQL/MariaDB、PHP/Perl、一个FTP服务器(通常是ProFTPD)和phpMyAdmin。默认情况下,XAMPP安装在/opt/lampp下,网页内容目录/opt/lampp/htdocs在Web服务器上可用。它设计用于本地开发环境和便捷安装,而不是最大安全性。因此,除非管理员运行XAMPP的安全助手,否则它包含默认的弱密码。此外,XAMPP上默认的ProFTPD配置通常将FTP根目录映射到相同的Web根目录,这意味着成功的FTP登录使攻击者能够写入文件,这些文件随后可由Web服务器执行。
同时,FTP暴力破解器使用的小型凭据集强烈表明XAMPP安装是GoBruteforcer的预定目标之一。当攻击者使用标准账户(通常是daemon或nobody)和弱默认密码获得XAMPP FTP的访问权限时,典型的下一步是将一个网页后门上传到Web根目录。
为了上传网页后门,攻击者也可能使用其他途径,例如配置不当的MySQL服务器或phpMyAdmin面板。已发布的案例研究和分析文章展示了在应用程序或主机配置不当时,通过phpMyAdmin实现代码执行或上传后门的实用技术。
攻击者仍然使用我们两年前观察到的相同PHP网页后门(SHA256: de7994277a81cf48f575f7245ec782c82452bb928a55c7fae11c2702cc308b8b)。此外,我们观察到的样本使用相同的哈希密码进行用户身份验证。
我们还怀疑存在其他传播链,因为我们发现属于僵尸网络的一些主机没有安装网页后门。
IRC僵尸程序安装
上一步安装的网页后门随后被用来下载并执行额外的恶意软件(如IRC僵尸程序)。
我们观察到网页后门命令指示目标获取并运行特定架构的有效负载。示例(如Web服务器访问日志中所示):
|
|
获取的有效负载是一个小的shell脚本:
|
|
这个shell脚本充当轻量级下载器和更新器。它首先确保在当前目录具有写和执行权限;如果没有,则切换到/tmp(如果也失败则退出)。然后它检查本地init_start文件的MD5值,如果不匹配或不存在,则删除任何现有文件,通过wget或curl从远程主机下载一个新副本,将下载的文件保存为init_start,使其可执行,然后运行该脚本。
远程服务器(在请求/.x/?x=<arch_name>时)根据架构参数选择要返回的IRC僵尸程序二进制文件。支持以下架构:
| 架构名称字符串 | 文件名 |
|---|---|
| arm, armv6l, armv7l, armhf, armv5tel | x_arm |
| aarch64, arm64 | x_arm64 |
| i686 | x_x86 |
| x86_64 | x_x64 |
根据被入侵主机的配置和攻击者获得的权限,新感染的机器可以在僵尸网络中扮演不同的角色:
- 普通扫描僵尸程序:最常见的是,主机运行暴力破解器和扫描器,在互联网上枚举并尝试密码登录。
- 分发主机:被入侵的设备可能被用来托管和向其他被入侵系统提供有效负载(作为前面示例中的
<compromised_host_ip>)。 - C2 / IRC中继:在某些情况下,被入侵的主机可以被提升为托管IRC风格的控制端点或充当备用C2以提高弹性。
这种模块化增加了僵尸网络的弹性。僵尸网络操作者可以通过网页后门以及已安装的IRC僵尸程序(部署后控制)来控制僵尸程序。内置的备用C2地址列表的存在以及更新IRC僵尸程序模块(并切换到备用服务器)的能力,使得即使在部分基础设施被破坏时也能保持持续控制。我们还观察到一个基于域名的备用机制:僵尸程序首先持续尝试硬编码的IP端点,只有在所有硬编码服务器都无响应时才会尝试解析C2域名。这样,僵尸程序在正常操作期间减少了意外的域名查询,但如果基础设施发生变化,则允许最后一条恢复路径。
入侵后控制和模块更新
在IRC僵尸程序连接到C2服务器后,攻击者获得了一个额外的通道来管理新感染的主机。僵尸程序的完整功能和控制协议将在下面的“IRC僵尸程序技术细节”部分详细描述。
大多数命令在共享的IRC频道上发出,因此许多僵尸程序同时收到相同的指令。一个常见的操作是指示僵尸程序下载或更新暴力破解器模块;这种更新通常每天进行两次,使用以下shell命令:
|
|
此管道获取并执行由test2.php生成的shell脚本。uname -m替换返回主机架构(例如,x86_64),而test2.php生成一个架构特定的下载器脚本,类似于前面描述的那个。下载器仅当本地副本缺失或其MD5校验和与预期值不同时,才获取选定架构的暴力破解器二进制文件。它将下载的文件以名称init_stop保存在/tmp文件夹中。
这是我们观察到的下载器脚本示例:
|
|
大约每400秒,僵尸程序收到命令/tmp/init_stop来启动下载的文件:
图5 — 暴力破解器重启命令
大约每5000秒,我们还观察到一条命令用于查找并停止暴力破解器进程:
|
|
此外,此命令使攻击者能够终止任何在命令行中包含init_stop并以同一用户账户运行的进程。使用kill -9确保立即强制关闭这些PID,包括暴力破解器本身以及使用引用init_stop的命令行启动的工具(例如,以gdb init_stop启动的调试器)。
检测托管服务提供商(OVH / DigitalOcean)
我们观察到僵尸网络操作者发出使用ipinfo.io的检查命令,以识别被入侵的主机是否属于特定的提供商。我们观察到该命令的几种变体,包括一个带有拼写错误"grep-i"的版本,这表明是交互式执行而非脚本化检查:
|
|
这些使用ipinfo.io的简单查找返回主机公网IP地址的组织名称,并允许攻击者检测提供商租户身份。我们在日志中观察到对digitalocean和ovh的探测是交互式命令,表明僵尸网络操作者偶尔会手动检查主机提供商元数据。
在稍后的过程中,我们还观察到另一个命令序列,旨在构建一个不在数据中心运行的僵尸程序列表,并通过排除报告为VPN、代理或Tor的主机来过滤掉可能的蜜罐。攻击者也交互式地运行这些命令,并且可能没有预先测试:第一条命令由于grep调用中缺少空格而失败。
|
|
这些查询背后可能的操作理由包括:
- 目标选择或排除:某些提供商可能被区别对待,例如,避免或降低对拥有活跃滥用/蜜罐程序或快速下架流程的云提供商的优先级。
- 标记与分组:僵尸网络操作者可能(按提供商或数据中心)标记僵尸程序,以便后续定位。
- 后续行动:基于提供商特性选择不同的入侵后策略(例如,提升为分发/C2节点)。
区块链攻击活动
如前所述,在监控过程中,我们注意到GoBruteforcer活动中使用的凭据集包含加密货币主题的用户名,表明攻击者对安全性差的区块链数据库感兴趣。后来,我们在一台被入侵的主机上发现了确凿的证据:除了僵尸网络二进制文件外,攻击者还放置了与该组织工具配置文件相匹配的额外模块(用Go编写并经过UPX打包)。
图6 — 攻击者控制的被入侵主机上暴露的目录列表
一个模块遍历TRON区块链地址并查询余额,以识别具有非零资金的账户。我们在二进制文件旁边发现了一个包含大约23,000个TRON地址的数据文件:
|
|
该模块使用多个API密钥查询服务tronscanapi.com来执行查询:
图7 — 操作者使用的Tronscan API密钥
我们还发现了用于币安智能链(BSC)和TRON的“代币归集”工具,同样用Go编写并经过UPX打包。它们的目的是使用私钥将代币从受害者地址转移到攻击者控制的钱包。我们在这台主机上没有找到私钥。很可能是私钥在运行时提供,并在操作完成后删除。
我们假设该操作可以在多个受感染的主机上并行运行,我们只观察到这样一个节点,攻击者显然忘记了删除文件。
从这些二进制文件中,我们还提取了攻击者使用的两个目标区块链钱包地址:
- TRON: TF5LUPC7MQWMcCgRLThY1v8zsHuoz1sBZW
- BSC: 0x208a8Ce726443B7ED9B621be70Cee7b2bB6723B2
基于对这些收款钱包和已恢复地址列表内容的链上交易审查,我们以中等信心确定,被入侵的数据库很可能属于一个较旧或遗留的区块链产品(例如,托管钱包服务)。大多数地址仅持有少量剩余余额,与残留资金而非活跃使用的账户相符。
图8 — 流向操作者TRON钱包的代币归集交易
IRC僵尸程序技术细节
在本节中,我们将分析该僵尸网络中用于控制受感染主机并部署GoBruteforcer的IRC僵尸程序的当前(2025年)版本。
现在分发的版本与2023年发现和记录的版本在几个方面有所不同。
与旧版本一样,恶意二进制文件使用UPX打包。但是,打包器的"UPX!"签名字节被替换为"XXXX":
图9 — 分析样本中被篡改的"UPX!“签名
一旦这些字节被修补回原始状态,标准的UPX可以成功解压样本。
以前,僵尸程序很可能用C编写,只有暴力破解器组件是用Go实现的。现在,该组织使用的所有样本都是用Go编写的,包括IRC僵尸程序。
此外,所有样本都使用Garbler进行混淆,这使分析变得复杂,因为二进制文件中不再包含纯文本字符串。
僵尸程序的功能也在几个方面发生了变化:
- 生成IRC昵称的算法被修改。现在附加到昵称后的主机名更不可预测——新代码使用正则表达式简单地剥离或替换无效字符,而不是用字面字符串
"default"替换无效字符。 - 旧版本的僵尸程序使用IRC命令
MODE <nick> -xi,这会使僵尸程序在服务器上可见。该命令在新版本中被移除。 - 命令处理器被重写,并且支持的指令集有所扩展。
- 增加了进程伪装功能。
下面我们将更详细地研究新的和已变更的功能,包括之前未记录的一些方面。
进程伪装
该恶意软件试图通过两种方式隐藏其在主机上的存在:更改进程名称和覆盖命令行。
伪装进程名
为了更改短进程名,恶意软件调用prctl并传入PR_SET_NAME操作。在调用之前,它会截断提供的名称,使其适合用于线程“comm”字段的16字节内核缓冲区。以下C风格伪代码说明了该技术:
|
|
在观察到的样本中,使用的假进程名称是init。因此,诸如System Monitor之类的工具会显示该值而不是真实的可执行文件名——这种行为有助于二进制文件与合法的系统进程混在一起:
图10 — 系统监视器显示更改后的进程名
伪装命令行
上述更改进程名称的方法不会影响许多工具(例如ps aux)显示的命令行。为了在这些工具的输出中隐藏恶意进程,恶意软件还覆盖内存中的argv缓冲区,使得/proc/<pid>/cmdline包含假的标签(和尾随的零字节)而不是原始的命令行。
样本首先读取/proc/self/cmdline以了解命令行的实际可见长度。然后它检索指向argv[0]缓冲区的指针。如果所选标签(在分析的样本中是"init")比可用的空间长,则代码回退到单字节标签("x")。最后,它构建标签加上NUL填充以匹配原始可见长度,并将这些字节写回argv缓冲区中相应的位置。下面的C伪代码反映了此例程:
|
|
因此,如果我们使用ps工具列出进程,会看到init而不是原始的命令行:
图11 — “ps”工具显示伪装后的命令行
初始化和连接服务器
当二进制文件开始执行时,main.init函数构建僵尸程序配置。配置包括一个C2 / IRC服务器端点列表(IP地址或域名)、每个条目的端口、一个用于IRC注册的生成的可见昵称,以及默认的IRC频道名称。
在观察到的样本中,有1-3个混淆的C2条目。在2025年活跃的攻击活动中,我们观察到以下C2服务器地址:
- 190.14.37[.]10:8080
- 93.113.25[.]114:8080
- xyz.yuzgebhmwu[.]ru:8080
图12 — 混淆的C2服务器地址列表
僵尸程序以轮询方式循环遍历硬编码的C2列表,尝试连接下一个C2服务器。通常,恶意软件使用的IRC服务器在TCP端口8080上运行。
TCP连接完成后,僵尸程序立即发送两条IRC命令:
|
|
对于USER命令,僵尸程序对字段使用硬编码值:
K用于用户名字段。2025用于真实姓名字段。
这意味着原始IRC消息中,IRC服务器引用僵尸程序时看起来像:
|
|
很可能,真实姓名字段是用于发布年份或版本号,因为在早期的僵尸程序中,此值设置为2022。
如果配置中为服务器启用了此选项,僵尸程序还可以发送PASS消息。在分析的样本中,此选项被关闭。
昵称格式
僵尸程序生成的昵称格式如下:
|
|
观察到的组成部分:
M— 该僵尸程序家族使用的常量前缀。<flag>— 一个小标志值(观察为单个数字,例如,表示root/非root)。<random-6-digits>— 一个六位随机标识符(如果昵称已被使用则重新生成)。<cpu_num>c— 表示受感染机器CPU数量的数值,后缀为c。<hostname>— 经过清理的设备主机名,截断为10个字符。
僵尸程序注册后,C2 IRC服务器立即以正常的连接编号回复,然后执行自动昵称重写。观察到的确切序列:
|
|
001-003(欢迎消息)。通常这些包含问候语、服务器版本和创建日期。在这里它们是空的,隐藏了关于服务器的有用信息。005(能力)。服务器声明了一个非常受限的规则集:只有一种类型的频道(以#开头的),并且只有两种类型的用户——操作者和所有其他人。操作者可以看到和控制一切,而普通用户则受到严格限制:他们无法看到彼此的存在或消息,实际上只能与操作者通信。这种设计防止了僵尸程序相互“交谈”,并确保只有操作者可以控制它们。422(昵称更改)。最后,服务器强制僵尸程序通过添加两个字母的国家代码(如US|)来更改其昵称。很可能国家代码是从僵尸程序的IP地址获取的,并允许操作者按地理位置快速分组僵尸程序。
服务器端限制
当前攻击活动中使用的IRC服务器强制执行受限策略,并限制未认证用户的功能。只允许一小部分命令集:
- 允许非操作者使用的命令:
NICK、USER、PASS、JOIN、PING、PONG、NOTICE、PRIVMSG。 - 尝试使用其他命令会导致481数值回复(权限被拒绝)。观察到的服务器消息:
1:server.com 481 <nick> :Permission Denied- You're not an IRC operator
反僵尸程序监控和劫持
如前所述,服务器配置为防止僵尸程序看到来自其他僵尸程序的消息。僵尸程序使用直接的NOTICE消息向僵尸程序操作者发送命令执行结果。(命令列表及其处理方式将在后面描述。)
这种配置向监控代理隐藏了僵尸网络,并防止僵尸程序被劫持。
在这种配置下,将消息从一个僵尸程序发送到另一个僵尸程序的唯一方法是向其昵称发送直接消息。然而,由于昵称中随机生成6位数字序列,以及我们缺乏受害者的主机名和地理位置信息,需要大规模的暴力破解攻击才能实现这一点。
此外,除了服务器限制外,僵尸程序本身在处理任何控制命令之前强制执行检查。观察到的逻辑是:
- 僵尸程序只考虑那些消息文本以
!前缀开头的消息(命令作为!<cmd> ...在IRCPRIVMSG的尾部部分传递)。 - 僵尸程序检查完整的IRC前缀标记(出现在前导
":"后的原始nick!user@host标记)。它在该前缀中搜索子串@127.0.0.1——即@紧跟着127.0.0.1。只有前缀包含@127.0.0.1的消息才能通过检查。如果子串不存在,则忽略该消息。
此功能本质上只允许本地连接到IRC服务器的操作者管理僵尸程序。即使绕过了此限制,上述两种措施也能防止僵尸程序被未经授权的一方控制。
默认频道
成功登录后,僵尸程序自动加入一小部分持久性频道。一个频道是全局基础频道(#bots),其他的是特定架构的频道。观察到的频道名称包括:
#bots(基础频道)#bots-x86#bots-arm#bots-arm64#bots-mips
每个架构的频道允许操作者仅向运行特定架构的僵尸程序发送命令(例如,将仅适用于x86的有效负载推送到#bots-x86)。
服务器发送001欢迎编号后,僵尸程序等待一小段时间(3秒),并为每个持久性频道列表中的频道发出JOIN消息。僵尸程序发送的示例行包括:
|
|
僵尸程序处理的IRC消息
僵尸程序处理服务器发送的以下类型的IRC消息:
PING— 立即回复PONG消息。001— 欢迎消息。当僵尸程序收到此消息时,发送JOIN命令以连接到其持久性频道。433— 昵称已被使用。收到此消息时,僵尸程序生成一个新的昵称并重新发送NICK命令。NICK— 服务器强制更改昵称。僵尸程序相应地更新其内部状态。JOIN— 用户加入频道的通知。如果是僵尸程序自身,它将频道记录在其列表中。PART— 僵尸程序离开频道的通知。僵尸程序从其列表中删除该频道。KICK— 僵尸程序从频道中被移除,并从其列表中删除该频道。PRIVVMSG— 给僵尸程序的直接消息。这些消息被操作者用来发出命令(在下一节中介绍)。ERROR— 错误通知。
命令与控制
操作者使用特定格式的命令控制僵尸程序。有两种可接受的传递形式:
- 频道广播(针对频道中的所有僵尸程序):
1:xx!x@127.0.0.1 PRIVMSG #bots-x86 :!<command> <args> - 直接(私密)命令到特定的僵尸程序昵称:
1:xx!x@127.0.0.1 PRIVMSG US|M|1|123456|4c|vps-123 :!<command> <args>
支持以下命令:
!join <channel>— 加入一个频道。僵尸程序接受命令参数中带或不带#的频道名称形式。如果频道不以#开头,僵尸程序会添加#。僵尸程序向服务器发送JOIN <channel>,并将该频道存储在其持久性频道列表中(并在重新连接时重新加入)。此命令允许操作者按特性(例如,托管在特定数据中心的僵尸程序)对僵尸程序进行分组。- 示例:
1:xx!x@127.0.0.1 PRIVMSG US|M|1|123456|4c|vps-123 :!join #bots-digitalocean
- 示例:
!part #<channel>— 离开频道。在此处理程序中,僵尸程序期望频道名称带有#。处理此命令的结果是,僵尸程序发送PART #<channel>并从其持久性列表中移除该频道。!channels— 列出持久性频道。僵尸程序使用私密NOTICE消息回复命令发送者,返回一个频道列表,如果列表为空则回复No persistent channels configured。- 示例:
1 2# server -> bot :xx!x@127.0.0.1 PR
- 示例: