From afe270adb5ab5ec9b28aa21c3c61b7b5dde446a1 Mon Sep 17 00:00:00 2001 From: Mattie Date: Sun, 7 May 2023 05:51:19 -0400 Subject: [PATCH] Add fetch_ips option --- .../pugmatt/bedrockconnect/BedrockConnect.java | 7 ++++++- .../pugmatt/bedrockconnect/gui/UIComponents.java | 4 ++++ .../bedrockconnect/listeners/PacketHandler.java | 10 +++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java index 77c8671..5be3b34 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/BedrockConnect.java @@ -32,9 +32,11 @@ public class BedrockConnect { public static boolean userServers = true; public static boolean featuredServers = true; public static boolean fetchFeaturedIps = true; + + public static boolean fetchIps = false; public static File whitelistfile; - public static String release = "1.32"; + public static String release = "1.33"; public static HashMap featuredServerIps; @@ -132,6 +134,9 @@ public static void main(String[] args) { if (str.startsWith("fetch_featured_ips=")) { fetchFeaturedIps = getArgValue(str, "fetch_featured_ips").toLowerCase().equals("true"); } + if (str.startsWith("fetch_ips=")) { + fetchIps = getArgValue(str, "fetch_ips").toLowerCase().equals("true"); + } if (str.startsWith("whitelist=")) { try { whitelistfile = new File(getArgValue(str, "whitelist")); diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java index 531aef3..32f6c1f 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/gui/UIComponents.java @@ -143,6 +143,10 @@ else if (!name.isEmpty() && !name.matches("^[a-zA-Z0-9]+( +[a-zA-Z0-9]+)*$")) return false; } + public static boolean isDomain(String address) { + return address.matches("(?![\\d.]+)((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\\.(xn--)?([a-z0-9\\._-]{1,61}|[a-z0-9-]{1,30})"); + } + public static String[] validateAddress(String server, BCPlayer player) { if (server.split(":").length > 1) { return server.split(":"); diff --git a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java index f1444bb..2629d6e 100644 --- a/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java +++ b/serverlist-server/src/main/com/pyratron/pugmatt/bedrockconnect/listeners/PacketHandler.java @@ -55,7 +55,7 @@ public void setPlayer(BCPlayer player) { public String getIP(String hostname) { try { - if(BedrockConnect.fetchFeaturedIps) { + if(BedrockConnect.fetchFeaturedIps || BedrockConnect.fetchIps) { InetAddress host = InetAddress.getByName(hostname); return host.getHostAddress(); } else { @@ -64,7 +64,7 @@ public String getIP(String hostname) { } catch (UnknownHostException ex) { ex.printStackTrace(); } - return "0.0.0.0"; + return hostname; } @Override @@ -396,7 +396,11 @@ public PacketSignal handle(NetworkStackLatencyPacket packet) { public void transfer(String ip, int port) { try { TransferPacket tp = new TransferPacket(); - tp.setAddress(ip); + if(BedrockConnect.fetchIps && UIComponents.isDomain(ip)) { + tp.setAddress(getIP(ip)); + } else { + tp.setAddress(ip); + } tp.setPort(port); session.sendPacketImmediately(tp); } catch (Exception e) {