MC服务器异常ip入侵过滤——使用GeoLite2-Country.mmdb离线数据库定位玩家IP归属国家

服务器插件 ipvalidate-for-mcpaper1.21.jar。

在搞一些东西时发现了GeoLite2这个数据库,本质上它应该算是一个离线的ip地理数据库,就是可以查询到IP对应的国家或地区,MAXMIND还提供了更具体的城市数据库,似乎也可以查到ip对应的城市位置。

那么言归正传,突然想起来之前我的世界服务器被入侵的鸟事🤬,就是有陌生的玩家闯入未设防的私人服务器,然后在里面搞破坏,或者乱插牌子。查询ip地址发现这些入侵者ip均来自国外虚拟服务提供商。
类似于[个人Minecraft服务器被境外黑客/熊孩子攻击的事例分享]。(https://www.bilibili.com/opus/829121476347035681?spm_id_from=333.1007.0.0&jump_opus=1)

这种类似的入侵其实不难理解,毕竟ipv4的范围也没多大,像咱们一般租用的这种阿里云或者腾讯云的小服务器本身就没啥防御,还在Discord上发现了一个叫ServerSeeker的机器人,声称能扫描到整个互联网的私人服务器。

所以之前的思路是写一个判断玩家的ip地址的paper插件Minecraft服务器被境外黑客/熊孩子入侵——开启IP验证,如果是国外ip就直接踢出去,但是当时采用的方法是插件查询类似http://www.cip.cc/这种网站,然后根据网站返回的结果判断ip属于哪个国家。但问题是这个网站也不太靠谱,经常拒绝访问什么的。

既然有GeoLite2这个东西,那就好办了,直接把数据库放到本地查询呗。

获取GeoLite2-Country.mmdb

从官网下载最新的离线数据库。
MAXMIND_GEOLITE2
在这里插入图片描述
解压后里面的GeoLite2-Country.mmdb就是我们需要的数据库。

代码

一点参考
intellij创建一个新项目,插件市场下载那个Minecraft developer插件
就是这个玩意
新建一个minecraft plugin项目,记得Build System选maven
在这里插入图片描述
在pom.xml里添加依赖

	<dependencies><dependency>...其他的一些依赖...</dependency><dependency><groupId>com.maxmind.geoip2</groupId><artifactId>geoip2</artifactId><version>3.0.1</version></dependency></dependencies>

把GeoLite2-Country.mmdb丢到resources文件夹下边
在这里插入图片描述
然后主函数里的代码:

package org.iplocation.ipvalidate;import com.maxmind.geoip2.DatabaseReader;
import com.maxmind.geoip2.exception.GeoIp2Exception;
import com.maxmind.geoip2.model.CountryResponse;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.plugin.java.JavaPlugin;import java.io.File;
import java.io.IOException;
import java.net.InetAddress;public class Ipvalidate extends JavaPlugin implements Listener {private DatabaseReader databaseReader;@Overridepublic void onEnable() {// 加载 GeoLite2 数据库try {File dbFile = new File(getDataFolder(), "GeoLite2-Country.mmdb");if (!dbFile.exists()) {saveResource("GeoLite2-Country.mmdb", false);}databaseReader = new DatabaseReader.Builder(dbFile).build();getLogger().info("GeoLite2-Country database loaded successfully.");} catch (IOException e) {getLogger().severe("Failed to load GeoLite2-Country.mmdb: " + e.getMessage());getServer().getPluginManager().disablePlugin(this);}// 注册事件监听器getServer().getPluginManager().registerEvents(this, this);}@Overridepublic void onDisable() {// 关闭数据库连接if (databaseReader != null) {try {databaseReader.close();} catch (IOException e) {getLogger().severe("Failed to close GeoLite2-Country database: " + e.getMessage());}}}@EventHandlerpublic void onPlayerLogin(PlayerLoginEvent event) {String playerName = event.getPlayer().getName();InetAddress ipAddress = event.getAddress();try {String country = getCountryByIp(ipAddress);if (!"China".equalsIgnoreCase(country)) {event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not welcomed.");getLogger().info("Player " + playerName + " was kicked. Country: " + country);}String message ="Player " + playerName + " enters the game. Player IP: " + ipAddress + " Location: " + country;Player player = event.getPlayer();player.sendMessage(message);Bukkit.broadcastMessage(message);getLogger().info(message);} catch (Exception e) {getLogger().severe("Failed to determine country for IP: " + ipAddress + " - " + e.getMessage());}}// 根据 IP 获取国家名称private String getCountryByIp(InetAddress ipAddress) throws IOException, GeoIp2Exception {CountryResponse response = databaseReader.country(ipAddress);return response.getCountry().getName();}// 测试函数public void testIp(String ipAddress) {try {InetAddress inetAddress = InetAddress.getByName(ipAddress);String country = getCountryByIp(inetAddress);getLogger().info("IP: " + ipAddress + " belongs to country: " + country);} catch (Exception e) {getLogger().severe("Error testing IP: " + ipAddress + " - " + e.getMessage());}}
}

接下来就可以构建jar包了

在这里插入图片描述
左侧,先双击clean,再双击package
导出的jar包丢到mc服务器的plugin目录下
启动服务器就行了。

ipvalidate-for-mcpaper1.21.jar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp——APP读取bin文件,解析文件的数据内容(二)

文章目录 读取bin文件内容&#xff0c;发送给蓝牙设备&#xff1b;上传文件返回数据格式通过URL路径获取文件对象&#xff0c;读取文件的数据内容file对象返回数据格式 读取bin文件内容&#xff0c;发送给蓝牙设备&#xff1b; 上传文件&#xff0c;根据返回路径&#xff0c;解…

【计算机视觉基础CV-图像分类】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用

引言 在上一篇文章中&#xff0c;我们详细介绍了ResNet与GoogLeNet的网络结构、设计理念及其在图像分类中的应用。本文将继续深入探讨如何在实际项目中应用这些模型&#xff0c;特别是如何保存训练好的模型、加载模型以及使用模型进行新图像的预测。通过这些步骤&#xff0c;读…

pytorch中torch.nn.functional.normalize、nn.norm和LayerNorm计算中的区别

torch.nn.functional.normalize 计算方式 v v max ⁡ ( ∥ v ∥ p , ϵ ) \mathbf{v} \frac{\mathbf{v}}{\max\left(\|\mathbf{v}\|_p, \epsilon\right)} vmax(∥v∥p​,ϵ)v​ pytorch例子 a torch.arange(12).reshape(3,4).float() torch.nn.functional.normalize(a, d…

sentinel限流+其他

quick-start | Sentinel sentinel 作用 限流 熔断降级 1&#xff0c;限制什么 QPS 并发线程数 2&#xff0c;限制什么 资源&#xff0c;什么资源 服务&#xff0c;方法&#xff0c;接口&#xff0c;或者一段代码 3&#xff0c;实现方式 配置规则 注解 其他 Java常见5种限流…

运行Zr.Admin项目(后端)

1.下载Zr.Admin代码压缩包 https://codeload.github.com/izhaorui/Zr.Admin.NET/zip/refs/heads/main 2.打开项目 我这里装的是VS2022社区版 进入根目录&#xff0c;双击ZRAdmin.sln打开项目 3.安装.net7运行时 我当时下载的代码版本是.net7的 点击安装 点击安装&#xff0…

Linux系统升级OpenSSH 9.8流程

参考链接&#xff1a; openssh最新版本下载地址&#xff1a;Index of /pub/OpenBSD/OpenSSH/portable/ 注意&#xff1a;openssh9.8需要依赖openssl&#xff0c;版本至少为1.1.1。 一、简介 Openssh存在远程代码执行漏洞(CVE-2024-6387)&#xff0c;攻击者可以成功利用该漏…

webrtc-internals调试工具

Google 的 Chrome&#xff08;87 或更高版本&#xff09;WebRTC 内部工具是一套内置于 Chrome 浏览器中的调试工具; webrtc-internals 能够查看有关视频和音频轨道、使用的编解码器以及流的一般质量的详细信息。这些知识对于解决音频和视频质量差的问题非常有帮助。 webrtc-int…

选择屏幕的用法

**************************定义控件*********************************** SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002. SELECT-OPTIONS bukrs FOR iloa-bukrs . "公司代码 SELECT-OPTIONS swerk FOR iloa-swerk OBLIGATORY . "工厂 SELECT-O…

Webpack在Vue CLI中的应用

webpack 作为目前最流行的项目打包工具&#xff0c;被广泛使用于项目的构建和开发过程中&#xff0c;其实说它是打包工具有点大材小用了&#xff0c;我个人认为它是一个集前端自动化、模块化、组件化于一体的可拓展系统&#xff0c;你可以根据自己的需要来进行一系列的配置和安…

如何用gpt来分析链接里面的内容(比如分析论文链接)和分析包含多个文件中的一块代码

如何用gpt来分析链接里面的内容&#xff0c;方法如下 这里使用gpt4里面有一个网路的功能 点击搜索框下面这个地球的形状即可启动搜索网页模式 然后即可提出问题在搜索框里&#xff1a;发现正确识别和分析了链接里面的内容 链接如下&#xff1a;https://arxiv.org/pdf/2009.1…

Docker Search失败,但是Pull成功的解决方法(环境:腾讯云服务器CentOS7系统安装Docker)

Docker Search失败&#xff0c;但是Pull成功的解决方法&#xff08;环境&#xff1a;腾讯云服务器CentOS7系统安装Docker&#xff09; 背景解决思路 背景 在安装完成Docker后&#xff0c;成功启动Docker(Systemctl start Docker)&#xff0c;使用搜索镜像命令&#xff08;Dock…

Obfuscator使用心得

最近在用obfuscator来混淆unity项目。但凡是涉及到反射的都不要混淆。反射需要使用到类名或者方法名&#xff0c;你混淆后&#xff0c;名字就不是原来的了。寄。还有序列化的数据也不要混淆。比如我的关卡数据序列化后保存到本地&#xff0c;在反序列化的时候找不到对应的字段名…

负载均衡式在线OJ

文章目录 项目介绍所用技术与开发环境所用技术开发环境 项目框架compiler_server模块compiler编译功能comm/util.hpp 编译时的临时文件comm/log.hpp 日志comm/util.hpp 时间戳comm/util.hpp 检查文件是否存在compile_server/compiler.hpp 编译功能总体编写 runner运行功能资源设…

云原生系列之docker的容器管理实战

前言 之前我们已经探讨过了docker的镜像,看了下时间,距离上次介绍容器的镜像已经过去两个月了, 如果你已经忘记了,可以直奔专栏:容器管理 从今天开始,我们要探讨docker 的容器了,docker的容器都是从镜像开始创建的,涉及到的操作有: 创建容器,停止容器,进入容器,删…

解决VMware的ubuntu22虚拟机没有网络

解决步骤 1.在 Windows 系统中&#xff0c;按 “WinR” 键&#xff0c;输入 “services.msc” 并回车&#xff0c;在服务列表中找到 “VMware DHCP Service” 和 “VMware NAT Service”&#xff0c;确保这两个服务已启动&#xff0c;若未启动则右键点击选择 “启动”&#xf…

NiChart 多模态神经影像(structural MRI,functional MRI,and diffusion MRI)处理和分析工具包安装

NiChart多模态神经影像部署 NiChart 本地安装Git clone 问题personal access token PAT 问题 NiChart 云端注册AWS验证问题 NiChart 是UPenn大学&#xff0c;Christos Davatzikos教授开发的一个多模态MRI影像&#xff0c;structural (sMRI), diffusion (dMRI)&#xff0c; and …

xinput1_3.dll放在哪里?当xinput1_3.dll丢失时的应对策略:详细解决方法汇总

在计算机系统的运行过程中&#xff0c;我们偶尔会遇到一些令人困扰的问题&#xff0c;其中xinput1_3.dll文件丢失就是较为常见的一种情况。这个看似不起眼的动态链接库文件&#xff0c;实则在许多软件和游戏的正常运行中发挥着至关重要的作用。一旦它丢失&#xff0c;可能会导致…

【VScode】第三方GPT编程工具-CodeMoss安装教程

一、CodeMoss是什么&#xff1f; CodeMoss是一款集编程、学习和办公于一体的高效工具。它兼容多种主流平台&#xff0c;包括VSCode、IDER、Chrome插件、Web和APP等&#xff0c;支持插件安装&#xff0c;尤其在VSCode和IDER上的表现尤为出色。无论你是编程新手还是资深开发者&a…

智慧农业物联网传感器:开启农业新时代

在当今科技飞速发展的时代&#xff0c;农业领域正经历着一场前所未有的变革&#xff0c;而智慧农业物联网传感器无疑是这场变革中的关键利器。它宛如农业的 “智慧大脑”&#xff0c;悄然渗透到农业生产的各个环节&#xff0c;为传统农业注入了全新的活力&#xff0c;让农业生产…

Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集AI-FGTM介绍算法流程初始化迭代更新&#xff08; t 0 t 0 t0 到 T − 1 T - 1 T−1&#xff09;迭代完成 AI-FGTM代码实现AI-FGTM算法实现攻击效果 代码汇总aifgtm.pytrain.pyadvtest.py 之前已经…