MCBBS纪念版

标题: [信息|管理|安全]ServerMonitor —— 轻量级的服务器监控日志、记录玩家信息[全版本] [打印本页]

作者: 502mc    时间: 2024-12-22 14:14
标题: [信息|管理|安全]ServerMonitor —— 轻量级的服务器监控日志、记录玩家信息[全版本]
本帖最后由 502mc 于 2025-3-11 21:30 编辑

插件介绍
你是否遇到过服务器突然冒出来有权限的熊孩子,却不易寻找其权限从何而来?
是否遇到过一觉醒来全服op、主城被毁、世界被删?
这款插件可以帮助你更方便的定位权限漏洞,查清熊孩子的权限从何而来。


功能介绍
可记录玩家聊天日志,并可设置为每个玩家单独记录 (默认启用)
可记录玩家命令日志,并可设置为每个玩家单独记录(默认启用 包括控制台执行的命令)
[spoiler]由于命令方块也算控制台,如果服里有长时间、高频率执行的命令方块会导致日志文件过大
故在1.0.3版本中新增了是否记录命令方块执行的命令选项,禁用该选项可解决此问题。
如果想记录部分命令方块的执行怎么办?
解决方法也很简单,给想被记录的命令方块重命名即可
[/spoiler]
可记录玩家游戏模式变更日志(默认启用),并可设置为每个玩家单独记录
可记录op变更记录,格式----时间 [XX]Opped/De-oppd : [XX](默认启用)
可监测不在插件白名单内的OP玩家使用不在命令白名单内的命令并作出自定义的处理
(默认启用 详见配置文件 如果你使用这个功能请手动在配置文件中把已授权的op添加到白名单或者用控制台重新给一遍op)

[spoiler]处理方法(可多选):
0.什么也不做
1.发送全服公告
2.控制台执行命令
3.使该玩家执行命令
4.使该玩家发送消息
5.对该玩家发送消息
6.控制台显示警告信息
7.将警告信息保存至警告日志
以上内容可在配置文件内进行个性化配置

这个功能有什么意义?能防卡权限吗?
仅能防止非白名单op使用命令,此功能本意并不是防御,而是警报。
日志通常不会主动去看,是发生什么事情之后被动去找,往往不是那么及时。
大多数熊孩子利用漏洞直接获取到op,或获取到权限给自己op后,会给自己创造试试。
(熊孩子看了本帖就不一定了...)当熊孩子以op身份执行命令时,
默认会有游戏内公告提醒 后台警告 并生成warning.log存储警告信息,
当你及时发现之后,可以立即做出对应处理,避免进一步损失。

注意:你可能需要某些插件使玩家以op身份执行命令,
为避免触发警报,建议把该命令加入白名单)[/spoiler]
可记录玩家加入/退出服务器以及被踢出游戏(默认启用)
(需注意:如果开启了为每个玩家单独一个记录文件,则必须开启记录玩家加入/退出服务器)
支持语言文件,默认使用zh_cn简体中文(所有记录格式完全可自定义
日志文件每天一个,支持自动压缩旧日志、自动删除多少天前的日志


插件截图
[spoiler] s1.webp [/spoiler]
[spoiler] s2.webp [/spoiler]
[spoiler] s3.webp [/spoiler]
[spoiler] s4.webp [/spoiler]


命令/权限
/ServerMonitor help —— 显示插件帮助信息
/ServerMonitor reload —— 重载插件配置
/ServerMonitor version —— 显示插件版本
以上ServerMonitor可缩写为sm
所有命令不区分大小写、所有命令支持TAB补全
servermonitor.use —— 权限 可使用/ServerMonitor命令,默认OP拥有


配置文件
[spoiler]
  1. #配置文件版本 请勿修改此项
  2. version: 5

  3. #语言 默认为简体中文
  4. language: 'zh_cn'

  5. #日志中日期格式
  6. dateFormat: 'yyyy/MM/dd HH:mm:ss'

  7. #行分隔符 Auto=自动,手动指定则填写如:'\r\n'
  8. lineSeparator: 'Auto'

  9. #即时保存 true为启用 false为禁用
  10. #若启用则每条日志信息即时保存到文件。当在线玩家非常多并且较为活跃时可能会频繁向硬盘写出数据,但性能影响微乎其微。
  11. #禁用此项则每条日志信息会存入缓冲区,每隔半小时或缓冲区存满时向硬盘写出数据。若插件未正常卸载(例如服务器崩溃)则可能导致部分记录丢失。
  12. realTimeSave: true

  13. #自动压缩旧日志 true为启用 false为禁用
  14. zipOldLog: false

  15. #自动删除旧日志 填0为禁用 填正整数n 为删除n天前的日志(例如填 7 表示删除7天前的日志) 负数无效
  16. delOldLog: 0

  17. #检查更新 true为启用 false为禁用
  18. checkUpdate: true

  19. #数据库
  20. database:
  21.   #是否启用数据库存储 true为启用 false为禁用
  22.   enable: false
  23.   #要使用的数据库类型 目前只支持 MySQL
  24.   type: 'MySQL'
  25.   #启用数据库后下面所有项目必须填写 (除了表前缀可空)
  26.   host: 'localhost'
  27.   #端口 MySQL默认3306
  28.   port: 3306
  29.   username: 'root'
  30.   #密码请正确填写 无密码可留空
  31.   password: ''
  32.   database: 'servermonitor'
  33.   #表前缀 留空表示无前缀 默认表名:chat_log、command_log 以此类推
  34.   tablePrefix: ''
  35.   #服务器名称 (用于多个服务器共用同一个表时区分日志属于哪个服务器)
  36.   serverName: '默认服务器'

  37. playerChat:
  38.   #记录玩家聊天 true为启用 false为禁用
  39.   enable: true
  40.   #为每个玩家单独记录
  41.   perPlayer: true

  42. playerCommand:
  43.   #记录玩家命令 true为启用 false为禁用
  44.   enable: true
  45.   #为每个玩家单独记录
  46.   perPlayer: true
  47.   #记录控制台命令 true为启用 false为禁用
  48.   consoleCommand: true
  49.   #记录命令方块执行的命令 true为启用 false为禁用
  50.   #禁用后仍然会记录已改名的命令方块,如果只想记录某个命令方块的命令,可以禁用此项然后将想记录的命令方块改名后放置
  51.   #此项仅在启用记录控制台命令的情况下生效 通常在服务器内有长时间、高频率执行的命令方块时禁用此项 以免日志文件过大
  52.   commandBlockCommand: true
  53.   #记录op变更日志(OpChange.log) true为启用 false为禁用
  54.   #此项在记录玩家命令和记录控制台命令都启用的情况下才能完整生效
  55.   opChange: true
  56.   #在日志中隐藏注册/登录命令中的密码 true为启用 false为禁用
  57.   hidePassword: false

  58. playerGameModeChange:
  59.   #记录玩家游戏模式变更 true为启用 false为禁用
  60.   enable: true
  61.   #为每个玩家单独记录
  62.   perPlayer: false

  63. #记录玩家加入/离开/被踢出
  64. joinAndLeave: true

  65. #关键词警报 当任何非OP玩家执行包含指定关键词的命令时向后台或在线OP发出警报
  66. keywordsAlert:
  67.   #是否启用 true为启用 false为禁用
  68.   #此功能在记录玩家命令启用的情况下才能生效
  69.   enable: false

  70.   #关键词列表 不区分大小写 按示例格式添加
  71.   keywords:
  72.     - /gamemode
  73.     - /give
  74.     - /op
  75.     - /deop

  76.   #命令取消执行 true为取消 false为不取消(即使不取消 玩家也未必有权限使用)
  77.   cancel: false

  78.   #警报信息 支持多行 按格式添加
  79.   alertMsg:
  80.     - '§c玩家§a{player}§c尝试使用命令:§b{command}'

  81.   #是否通知在线OP true为通知 false为不通知
  82.   reportAdmin: true

  83.   #是否通知控制台 true为通知 false为不通知
  84.   reportConsole: true

  85.   #是否保存警报信息到日志(KeywordsAlert.log) true为保存 false为不保存
  86.   #如果启用数据库,启用此项将保存到数据库。
  87.   saveToLog: true

  88. #非白名单OP执行命令警报
  89. commandAlert:
  90.   #是否启用 true为启用 false为禁用
  91.   #此功能在记录玩家命令启用的情况下才能生效
  92.   enable: true

  93.   #玩家白名单 按示例格式添加(记得删除示例玩家名)
  94.   whitelist:
  95.     - 玩家名

  96.   #命令白名单 按示例格式添加
  97.   commandWhiteList:
  98.     - /help
  99.     - /suicide

  100.   #非白名单命令取消执行 true为取消 false为不取消
  101.   cancel: true

  102.   handleMethod:
  103.     #处理方法 0=不处理 1=发送全服公告 2=控制台执行命令 4=使该玩家执行命令 8=使该玩家发送消息 16=对该玩家发送消息 32=控制台显示警告信息 64=将警告信息保存至警告日志
  104.     #以上处理方式不冲突,选择多种处理方式相加即可。例如 既要发送全服公告又要控制台执行命令 则1+2=3 处理方法填3即可。
  105.     #默认1+2+32+64=99
  106.     method: 99
  107.     #以下为各处理方法的详细设置,使用{player}表示该玩家的名字,{command}表示事件命令。

  108.     #要发送的公告 支持多条 按格式添加
  109.     broadcast:
  110.       - '§e[§d公告§e]§4玩家§a{player}§4因利用bug获取OP权限而惨遭封禁!'
  111.       - '§e[§d公告§e]§4玩家§a{player}§4因利用bug获取OP权限而惨遭封禁!'
  112.       - '§e[§d公告§e]§4玩家§a{player}§4因利用bug获取OP权限而惨遭封禁!'

  113.     #控制台执行的命令 支持多个 按格式添加 不用加"/"
  114.     consoleCmd:
  115.       - 'deop {player}'
  116.       - 'ban {player}'

  117.     #使该玩家执行的命令 支持多个 按格式添加
  118.     #需注意本方法的优先级低于控制台执行命令,并且不能执行该玩家无权执行的命令。
  119.     #(如果使用本方法,切记要把这里写的命令加入白名单或在上一步用控制台取消该玩家的OP,不然...)
  120.     playerCmd:
  121.       - '/suicide'

  122.     #使该玩家发送消息 支持多条 按格式添加
  123.     playerSendMsg:
  124.       - '我卡bug了!我卡bug了!我卡bug了!'

  125.     #对该玩家发送消息 支持多条 按格式添加
  126.     sendMsgToPlayer:
  127.       - '惊喜不惊喜?意外不意外?'

  128.     #控制台显示警告信息 支持多行 按格式添加
  129.     consoleWarning:
  130.       - '§4§l------------------警告------------------'
  131.       - '§4玩家§b{player}§4不在白名单并以OP身份执行命令:§6{command}'
  132.       - '§e请立即查询该玩家指令记录并检查权限系统是否存在漏洞'
  133.       - '§4§l------------------警告------------------'

  134.     #将警告保存到警告日志(Warning.log) 支持多行 按格式添加
  135.     #如果启用数据库,启用此项将保存到数据库。
  136.     warningLog:
  137.       - '玩家{player}以管理员身份执行命令:{command} , 请立即查询该玩家命令记录并检查权限系统是否存在漏洞!'
复制代码
[/spoiler]


语言文件
[spoiler]
  1. #语言文件版本 请勿修改此项
  2. version: 5

  3. log-prefix: '§3[§aServerMonitor§3] '
  4. message-prefix: '§3[§aServerMonitor§3] §e-> '
  5. language-version-error: '§c语言文件版本错误: '
  6. language-version-outdated: '§e当前语言文件版本:§a{0} §c最新版本:§b{1} §6需要更新.'
  7. language-update-complete: '§a语言文件更新完成!'
  8. update-found-new-version: '§c发现新版本可用! §b当前版本: {0} §d最新版本: {1}'
  9. update-major-update: '§e(有大更新)'
  10. update-download-link: '§a下载地址: '
  11. update-check-failure: '§e检查更新失败, 状态码: '
  12. update-check-exception: '§4检查更新时发生IO异常.'
  13. enable-message: '§b已启用.'
  14. disable-message: '§c已卸载.'
  15. command-help:
  16.   - '§e===========§bServerMonitor§e==========='
  17.   - '/ServerMonitor help ---- §a查看指令帮助'
  18.   - '§e/ServerMonitor reload ---- §a重载插件配置'
  19.   - '§e/ServerMonitor version ---- §a查看插件版本'
  20. command-reload: '§a插件配置重载完成.'
  21. command-unknown: '§c未知的子命令!'
  22. log-player-chat: '玩家[{player}]说 : {message}'
  23. log-player-command: '玩家[{player}]({op?})执行命令 : {command}'
  24. log-player-command-op: 'OP'
  25. log-player-command-non-op: '非OP'
  26. log-console-command: '控制台[{sender}]执行命令 : {command}'
  27. log-op-change-op-player: '玩家[{player1}]Opped : {player2}'
  28. log-op-change-deop-player: '玩家[{player1}]De-Opped : {player2}'
  29. log-op-change-op-console: '控制台[{sender}]Opped : {player}'
  30. log-op-change-deop-console: '控制台[{sender}]De-opped : {player}'
  31. log-player-game-mode-change: '玩家[{player}]的游戏模式更改为 : {gamemode}'
  32. log-player-join: '玩家[{player}]({ip}) : 加入服务器'
  33. log-player-quit: '玩家[{player}]({ip}) : 退出服务器'
  34. log-player-kick: '玩家[{player}]({ip}) : 被踢出游戏 原因: {reason}'
  35. message-exception: '异常信息: '
  36. message-exception-open: '§4[错误] §5在打开 {file} 时发生IO异常!'
  37. message-exception-write: '§4[错误] §5在写 {file} 时发生IO异常!'
  38. message-exception-close: '§4[错误] §5在关闭 {file} 时发生IO异常!'
  39. message-exception-save: '§4[错误] §5在保存 {file} 时发生IO异常!'
  40. message-exception-zip: '§4[错误] §5在压缩 {file} 时发生IO异常!'
  41. message-error-delete: '§4[错误] §5删除 {file} 失败!'
  42. message-error-create: '§4[错误] §5创建目录失败:{file}'
  43. message-database-connect-success: '连接数据库成功'
  44. message-database-connect-exception: '连接数据库失败或初始化错误:{0}'
  45. message-database-connect-unexpected-close: '数据库连接被意外关闭,将尝试重新连接。(此情况不应发生,如果你频繁看到此警告,请检查不稳定因素)'
  46. message-database-connect-close-exception: '关闭数据库连接时出现异常:{0}'
  47. message-database-update-exception: '向数据库中添加日志时出现异常:{0}'
复制代码
[/spoiler]


下载地址
ServerMonitor-1.5.0.jar (67.38 KB, 下载次数: 63)
备用下载地址:百度网盘
本插件已在1.3.2/1.4.7/1.5.2/1.6.4/1.7.10/1.8.8/1.9.4/1.10.2/1.11.2/1.12.2/1.13.2/1.14.4/1.15.2/1.16.5/1.17.1/1.18.2/1.19.4/1.20.6/1.21.4测试通过
插件理论兼容Minecraft 2.0.0版本之前的任何新版本,所以即使是本帖没有标明的新版本通常也能正常使用。


插件交流群
插件交流QQ群:215549411 点击链接加入群聊


问题反馈
如果使用过程中有任何问题/建议/意见欢迎在本帖回复或加群反馈
最后,如果你觉得本插件有用,请给我评个分~
提示:评分人气不消耗自身人气


更新日志
2025-02-16 1.5.0版本发布
  - 增加MySQL支持, 详见配置文件
  - 增加Folia支持
  - 语言文件更新,版本号升级为5.
  - 配置文件更新,版本号升级为5.
  - 控制台警告改为循环10次
  - 其他细节修正和优化.
[spoiler]2024-09-25 1.4.1版本发布
  - 重写检查更新,现在会在控制台输出当前版本到最新版本的更新内容并且OP每日第一次进游戏时会收到更新提醒.
  - 权限 servermonitor.use 更改为 servermonitor.admin
2024-03-27 1.4.0版本发布
  - 重构日志部分代码.
  - 现在自动设置玩家白名单不会再导致配置文件中的注释丢失了.
  - 增加了关键词警报功能,详见配置文件,旧版本在更新版本后会自动升级配置文件.
  - 修复了隐藏密码功能中的命令识别错误
  - 优化检查更新中新版本判断逻辑.
  - 其他细节修正和优化.
  - 由于MCBBS关闭,删除插件中指向MCBBS的链接.
2023-07-12 1.3.2版本发布
  - 根据举报对命令中的密码进行隐藏处理.
  - 删除部分无用代码减小插件体积.
  - 其他细节修正和优化.
2022-03-13 1.3.1版本发布
  - 修复语言文件升级到版本4时错误赋值玩家命令日志格式的问题.
2022-03-07 1.3.0版本发布
  - 重构部分代码.
  - 优化检查更新.
  - 重写配置文件和语言文件加载.
  - 语言文件更新,版本号升级为4.
  - 修复在远古版本中可能导致配置文件损坏的问题.
  - 其他细节修正和优化.
2021-11-27 1.2.1版本发布
  - 修复了未启用命令警报时在控制台op/deop会出现报错的问题.
2021-11-20 1.2.0版本发布
  - 接入bStats.org匿名统计信息
  - 优化op修改判断逻辑、修复自动设置白名单功能可能出现的错误.
  - 调整部分事件优先级、部分已取消事件不再记录日志.
  - 兼容1.7.2以及之前的版本.
  - 配置文件、语言文件、日志文件统一使用UTF8编码读写,不再使用系统默认编码.
  - 自动压缩旧日志选项现在默认关闭.
  - 禁用即时保存时,现在每半小时额外保存一次.
  - 修改所有日志文件的创建时机,现在当真正需要写出日志时才创建.
  - 其他细节优化.
2020-09-26 1.1.4版本发布
  - 命令补全支持大写.
  - 其他细节优化.
2020-07-09 1.1.3版本发布
  - 增加了在控制台op或deop时自动设置玩家白名单的功能.
2020-04-16 1.1.2版本发布
  - 修复了日期更新后玩家日志没有正确关闭导致的错误.
  - 修复了压缩异常、删除错误消息中{file}无效的错误.
  - 自动检查更新选项改为默认开启.
2020-04-15 1.1.1版本发布
  - 修复了写警告日志会出现空指针异常的问题.
2020-04-15 1.1.0版本发布
  - 日志文件改为每天一个(opChange.log和Warning.log除外).
  - 增加了自动压缩旧日志的选项.
  - 增加了自动删除多少天前的日志的选项.
  - 增加了检查更新选项(默认关闭).
  - 优化命令的TAB补全.
  - 优化代码,修正细节错误.
  - 添加zh_tw语言文件(用户提供).
2020-04-09 1.0.3版本发布
  - 增加了是否记录命令方块执行命令的选项.
  - 修复了NPC触发事件导致的报错.
2020-03-31 1.0.1版本发布
  - 处理了可能出现的异常.
2020-03-24 1.0.0版本发布[/spoiler]


开源
插件为非盈利性插件,免费发布,严禁销售和转卖
开源协议遵循Apache-2.0
开源地址:Github

本插件所用所有代码均为原创,不存在借用/抄袭等行为

作者: _xiaolizi_    时间: 2025-4-8 11:12
冒昧的问一下,这是插件还是模组
作者: 502mc    时间: 2025-4-20 15:25
_xiaolizi_ 发表于 2025-4-8 11:12
冒昧的问一下,这是插件还是模组

插件   
作者: 李光六    时间: 2025-4-20 21:05
自己使用命令被封了怎么办
作者: 逗B    时间: 2025-4-21 00:48
查水表专用插件awa                    hhhhhhhhhhh
作者: 502mc    时间: 2025-4-21 22:02
李光六 发表于 2025-4-20 21:05
自己使用命令被封了怎么办

用控制台解封 去配置文件加白名单 或用控制台给op也会自动加白名单
作者: 逗B    时间: 2025-4-23 01:41
全服op、主城被毁、世界被删?

血的教训,巅峰时期,百人在线。就是全服op、主城被毁 给我弄关服了。。




欢迎光临 MCBBS纪念版 (https://mcbbs.win/) Powered by Discuz! X3.5