Player IP Logger

Record player IP addresses

API

Installation command

!!MCDR plugin install player_ip_logger

Synced at

...

Last update

...

Latest version

Total downloads

1685

Back to catalogue

PF-player_ip_logger

Player IP Logger for MCDReforged

仓库大小  最新版 总下载量 最新发布下载量

插件简介

Player IP Logger 是一款为 MCDReforged (MCDR) 开发的插件,主要功能是记录玩家的 IP 地址。该插件通过监控玩家的登录和断开连接事件,记录玩家对应的 IP 地址,并提供便捷的 API 供服务器管理员进行查询、封禁或解禁操作。

功能

  • 自动记录玩家 IP: 插件会自动监控玩家的登录和断线信息,捕获并保存 IP 地址。
  • 封禁与解禁功能: 支持通过命令封禁或解禁玩家或 IP 地址,适用于服务器管理。
  • 多格式支持: 支持多种日志格式解析,确保不同场景下都能正确提取玩家的 IP 地址。
  • IP 地址存储: 将玩家所有历史 IP 地址保存到配置文件中,避免重复记录。
  • 支持 API 调用: 提供了多种 API,方便插件调用,或让管理员查询玩家的 IP 信息。
  • 假人判断: 假人一般没有IP,通过这个特性可以判断出假人,多用于玩家列表筛选。

安装与配置

  1. 安装: 将插件文件放入 MCDReforged 的 plugins 目录中,启动服务器。

  2. 配置: 插件会自动生成一个 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 id
  • Disconnecting 玩家名 (/IP地址:端口)
  • 玩家名 (/IP地址:端口) lost connection

更多事件请反馈以增加

与 LoginProxy 对接

如果服务器安装了 LoginProxy,插件会自动进行深度对接:

  1. 真实 IP 记录:监听 login_proxy.on.login / login_proxy.on.logoff 事件,直接从握手连接获取玩家真实 IP(frp 等代理场景下依然有效,参见 issue #8)。
  2. 黑白名单双向同步
    • !!ip ban / !!ip pardon 封禁/解禁玩家或 IP 时,会同时同步到 loginproxy 的黑白名单(在握手阶段即拦截,无需等待玩家进入服务器)。
    • !!ip sync 可将 loginproxy 已有的封禁数据(config/loginproxy/list.json)单向导入本插件,启动时也会自动执行一次;重复执行不会产生重复条目。
    • 注意:loginproxy 支持 IP 网段(如 10.0.0.0/8),本插件仅导入单个 IP(/32)。
  3. 在线 IP 查询 API:提供 get_online_ip(name)get_all_online_conns(),供其他插件查询玩家当前在线连接的真实 IP。

未安装 loginproxy 时,上述功能自动降级,插件退回日志解析模式,不影响正常使用。

代理/内网穿透场景 (如 frp)

使用 frp 等代理时,服务端日志中只能看到 127.0.0.1,无法获取真实 IP。

  • 从 v1.3.0 起,插件会自动监听 LoginProxylogin_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 开发

  1. is_player(name: str) -> bool

    • 描述: 检查是否是真实玩家(多用于假人判断)
    • 参数:
      • name:玩家名称。
    • 返回: 如果玩家存在记录返回 True,否则返回 False

    示例:

    if is_player("Shusao"):
        print("Shusao 是 真人玩家")
    else:
        print("Shusao 是 假人")
    
  2. get_player_ips(name: str) -> list

    • 描述: 获取指定玩家的所有 IP 地址。
    • 参数:
      • name:玩家名称。
    • 返回: 包含玩家所有历史 IP 地址的列表。如果玩家没有记录,返回空列表。

    示例:

    ips = get_player_ips("Shusao")
    print(f"Shusao 的 IP 历史: {ips}")
    
  3. get_player_names(ip: str) -> list

    • 描述: 获取使用该 IP 地址的所有玩家名称。

    • 参数:

      • ip:IP地址。
    • 返回: 包含玩家名称的列表。

  4. ban_player(name: str) -> None

    • 描述: 封禁指定玩家(支持离线玩家), 后续通过该ID登录的IP也会被封。
    • 参数:
      • 玩家ID。
  5. unban_player(name: str) -> None

    • 描述: 解禁指定玩家。
    • 参数:
      • 玩家ID。
  6. ban_ip(ip: str) -> None

    • 描述: 封禁指定IP, 后续通过该IP登录的玩家也会被封。
    • 参数:
      • 玩家IP。
  7. unban_ip(ip: str) -> None

    • 描述: 解禁指定IP。
    • 参数:
      • 玩家IP。

API 开发(事件)

  1. 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