WSMC
模组属性评比

距离显示结果还剩5票~

路过的这位少侠,你觉得这款Mod怎么样,可否愿意来评一评它呢?登录并评比
更新日志
  • 暂无日志..

历史编辑记录更多
    管理组

      暂无管理组..

    编辑组

      暂无编辑组..

    活跃
    开源

    WSMC

    • 概述

      本模组为 Minecraft 增加 WebSocket 支持。

      由于大部分 CDN 提供商(例如 Cloudflare,华为云等)并未提供裸 TCP 的支持、DDoS 防护,或者过于昂贵,Minecraft 服务器抵抗 DDoS 攻击很容易难倒各大服主。

      本模组通过为服务端和客户端增加 WebSocket 支持,服务器可以隐藏在 CDN 服务器之后,从而有效避免 DDoS 攻击。

      运行环境

      本 Mod 可以独立运行,支持 Forge、NeoForge 和 Fabric,无需其他依赖。

      服务端

      当本 Mod 安装在服务器上时:

      1. 服务端可以接受玩家通过 WebSocket 接入;

      2. 在没有单独禁止的情况下,玩家仍可通过原版 TCP 直接接入;

      3. 服务端在原来 TCP 端口上监听 WebSocket 接入请求,受 server.properties 控制;

      4. 未安装本 Mod 的客户端仍可通过原版 TCP 加入安装了本 Mod 的服务端(注意:其他安装的 Mod 可能会阻止客户端的加入);

      5. 服务器可以在 WebSocket 握手之后获取客户端相关信息(例如通过 X-Forwarded-For 获取客户端真实 IP 等)。

      客户端

      当本 Mod 安装在客户端上时:

      1. 可以使用“ws://域名.com:端口/WebSocket路径”这种格式加入同样安装了本 Mod 的服务器;

      2. 客户端仍可使用原版的“域名.com:端口”方式加入原版服务器。

      客户端可以灵活指定 WebSocket 连接的 IP 、端口号、 HTTP 请求的 HOST 和 TLS 的 SNI 这些参数,以应对复杂多变的网络环境和优化连接速度。以下是一些示例,端口号在任何情况下都可指定:

      普通非安全的WebSocket连接,指定HTTP请求的HOST为host.com,连接到ip.ip.ip.ip(一般是优选过的IP):
      ws://host.com@ip.ip.ip.ip

      安全的WebSocket连接,HTTP请求的HOST和TLS的SNI均为sni-host.com,连接到ip.ip.ip.ip(一般是优选过的IP):
      wss://sni-host.com@ip.ip.ip.ip

      安全的WebSocket连接,分别指定HOST和SNI,使用HOST来解析IP:
      wss://sni.com:@host.com[:port]

      安全的WebSocket连接,分别指定HOST和SNI,使用SNI来解析IP:
      wss://:host.com@sni.com[:port]

      分别设置HOST、SNI和IP
      wss://sni.com:host.com@ip.ip.ip.ip

      注意事项

      • 本 Mod 不增加任何游戏内容;

      • 本 Mod 不修改任何 GUI;

      • 本 Mod 与其他 TCP-WebSocket 转换程序兼容,例如 websocat。

      • 在服务端,本 Mod 不会终结TLS连接,因此需要前置一个 NGINX 之类的来把 HTTPS 转为 HTTP 发送给安装了本模组的服务端。

      • 大部分 CDN(例如 Cloudflare),要求SNI与HOST一致,并且端口限定80/443,否则拒绝连接。因此 wss://sni-host.com@ip.ip.ip.ip 是最常用的客户端连接方式。

      配置

      本 Mod 的服务端通过 Java 的系统属性(System Properties)进行配置,客户端没有配置。可使用 JVM 命令行的 -D 进行参数传递:

      1.  wsmc.disableVanillaTCP:默认 false。设为 true 以禁用原版 TCP 登入;

      2. wsmc.wsmcEndpoint:默认未设置,此时客户端可以使用任意 WebSocket 路径加入服务器。设置该选项将只允许客户端使用指定的 WebSocket 路径加入服务器,大小写敏感;

      3. wsmc.debug:默认 false。是否显示调试信息;

      4. wsmc.dumpBytes:默认 false。是否显示 WebSocket 每一帧。需要“-Dwsmc.debug=true”。

      5. wsmc.maxFramePayloadLength:默认65536,一般不用动,如果Netty报“Max frame length of x has been exceeded”这个错误时可以适当增加帧大小。

      API

      对于 Mod 开发者,在服务端,可以将“net.minecraft.network.Connection”实例强制类型转换为 IConnectionEx,然后调用其 getWsHandshakeRequest() 获取 WebSocket 握手的详细信息。

      例如 X-Forwarded-For 和 CF-IPCountry,分别可获得客户端真实 IP 与地区/国家代码。

    短评加载中..