Installation command
!!MCDR plugin install player_ip_loggerAuthor
Repository
Synced at
...
Last update
...
Latest version
Total downloads
1685
Back to catalogue
Player IP Logger for MCDReforged
插件简介
Player IP Logger 是一款为 MCDReforged (MCDR) 开发的插件,主要功能是记录玩家的 IP 地址。该插件通过监控玩家的登录和断开连接事件,记录玩家对应的 IP 地址,并提供便捷的 API 供服务器管理员进行查询、封禁或解禁操作。
功能
- 自动记录玩家 IP: 插件会自动监控玩家的登录和断线信息,捕获并保存 IP 地址。
- 封禁与解禁功能: 支持通过命令封禁或解禁玩家或 IP 地址,适用于服务器管理。
- 多格式支持: 支持多种日志格式解析,确保不同场景下都能正确提取玩家的 IP 地址。
- IP 地址存储: 将玩家所有历史 IP 地址保存到配置文件中,避免重复记录。
- 支持 API 调用: 提供了多种 API,方便插件调用,或让管理员查询玩家的 IP 信息。
- 假人判断: 假人一般没有IP,通过这个特性可以判断出假人,多用于玩家列表筛选。
安装与配置
-
安装: 将插件文件放入 MCDReforged 的
plugins目录中,启动服务器。 -
配置: 插件会自动生成一个
config.json配置文件,存储玩家和 IP 记录。文件格式如下:{ "users": { "玩家名称": [ "玩家的IP1", "玩家的IP2" ] }, "banned_player": [], "banned_ips": [] }
命令
- !!ip ban
<player/ip>: 封禁指定玩家或 IP。 - !!ip pardon
<player/ip>: 解禁指定玩家或 IP。 - !!ip list: 显示当前封禁的玩家和 IP。
- !!ip sync: 从 loginproxy 导入已有封禁数据(单向导入,可重复执行)。
事件处理
- 当玩家登录或断开连接时,插件会自动解析相关日志信息,并提取玩家名称和 IP 地址。
- 如果玩家的 IP 地址尚未记录,将其添加到配置文件中,并自动保存。
支持的事件格式
该插件支持以下日志格式的解析:
玩家名[/IP地址:端口] logged in with entity idDisconnecting 玩家名 (/IP地址:端口)玩家名 (/IP地址:端口) lost connection
更多事件请反馈以增加
与 LoginProxy 对接
如果服务器安装了 LoginProxy,插件会自动进行深度对接:
- 真实 IP 记录:监听
login_proxy.on.login/login_proxy.on.logoff事件,直接从握手连接获取玩家真实 IP(frp 等代理场景下依然有效,参见 issue #8)。 - 黑白名单双向同步:
!!ip ban/!!ip pardon封禁/解禁玩家或 IP 时,会同时同步到 loginproxy 的黑白名单(在握手阶段即拦截,无需等待玩家进入服务器)。!!ip sync可将 loginproxy 已有的封禁数据(config/loginproxy/list.json)单向导入本插件,启动时也会自动执行一次;重复执行不会产生重复条目。- 注意:loginproxy 支持 IP 网段(如
10.0.0.0/8),本插件仅导入单个 IP(/32)。
- 在线 IP 查询 API:提供
get_online_ip(name)与get_all_online_conns(),供其他插件查询玩家当前在线连接的真实 IP。
未安装 loginproxy 时,上述功能自动降级,插件退回日志解析模式,不影响正常使用。
代理/内网穿透场景 (如 frp)
使用 frp 等代理时,服务端日志中只能看到 127.0.0.1,无法获取真实 IP。
- 从 v1.3.0 起,插件会自动监听 LoginProxy 的
login_proxy.on.login/login_proxy.on.logoff事件,直接从握手连接中获取玩家真实 IP(无需额外配置,但需安装 loginproxy 插件)。 - 同时新增配置项
ignore_private_ip(默认true),过滤回环/内网 IP,避免127.0.0.1污染玩家 IP 记录。
若不使用 loginproxy,也可以在 frp 中开启 Proxy Protocol 并在服务端安装对应的 mod,使服务端日志直接显示真实 IP:
# frpc.ini
[[proxies]]
name = "mc"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565
remotePort = 25565
transport.proxyProtocolVersion = "v2"
更多事件请反馈以增加
使用
插件会自动运行并自动监听玩家的登录与断开事件,并记录 IP 地址,不需要任何配置。管理员可以快速对玩家或 IP 进行封禁或解禁操作,或者查看封禁列表。
API 开发
-
is_player(name: str) -> bool
- 描述: 检查是否是真实玩家(多用于假人判断)
- 参数:
name:玩家名称。
- 返回: 如果玩家存在记录返回
True,否则返回False。
示例:
if is_player("Shusao"): print("Shusao 是 真人玩家") else: print("Shusao 是 假人") -
get_player_ips(name: str) -> list
- 描述: 获取指定玩家的所有 IP 地址。
- 参数:
name:玩家名称。
- 返回: 包含玩家所有历史 IP 地址的列表。如果玩家没有记录,返回空列表。
示例:
ips = get_player_ips("Shusao") print(f"Shusao 的 IP 历史: {ips}") -
get_player_names(ip: str) -> list
-
描述: 获取使用该 IP 地址的所有玩家名称。
-
参数:
ip:IP地址。
-
返回: 包含玩家名称的列表。
-
-
ban_player(name: str) -> None
- 描述: 封禁指定玩家(支持离线玩家), 后续通过该ID登录的IP也会被封。
- 参数:
- 玩家ID。
-
unban_player(name: str) -> None
- 描述: 解禁指定玩家。
- 参数:
- 玩家ID。
-
ban_ip(ip: str) -> None
- 描述: 封禁指定IP, 后续通过该IP登录的玩家也会被封。
- 参数:
- 玩家IP。
-
unban_ip(ip: str) -> None
- 描述: 解禁指定IP。
- 参数:
- 玩家IP。
API 开发(事件)
- player_ip_logger.player_login
- 描述: 玩家登录时分发
player_ip_logger.player_login事件,便于其他插件上报信息 - 样例:
def do_something(server: PluginServerInterface, player_name:str, player_ip:str): pass server.register_event_listener('player_ip_logger.player_login', do_something)
- 描述: 玩家登录时分发
使用此API的插件
-
PF-GUGUbot : MCDR-GUGUBot QQ机器人 群聊管理 聊天互转
用于区分真实玩家
-
IPLocation : 在玩家上线时查询并显示IP归属地。
获取玩家IP用以查询归属地
-
NDP : NDP联合封禁系统客户端
获取玩家IP
-
Division : 一个支持将玩家分组&向组/玩家留言的插件
根据玩家的ip获取该玩家的时区
贡献
如果发现问题,或希望贡献代码,欢迎在 GitHub 提交 Issue 或 Pull Request。
未来计划
- 暂无
欢迎提建议!
README source: https://raw.githubusercontent.com/LoosePrince/PF-player_ip_logger/main//README.md