NetworkUtil class

Пакет: com.hypixel.hytale.common.util

Файл: com/hypixel/hytale/common/util/NetworkUtil.java

Поля (55)

МодификаторыТипИмя
ANY_IPV4_ADDRESS
static Inet6Address ANY_IPV6_ADDRESS
ANY_IPV6_ADDRESS
LOOPBACK_IPV4_ADDRESS
LOOPBACK_IPV6_ADDRESS
private final Predicate<InetAddress> predicate
InetAddress var0
var0
String var0
var0
var0
Enumeration var1
InetAddress var1
Path var1
String var1
int var1
boolean var1
var1
String var13
var13
var13
var13
Enumeration var17
NetworkInterface var2
InetAddress var2
var2
String var2
String var2
int var2
var2
var2
Enumeration var3
Enumeration var3
String var3
var3
var3
var3
var3
NetworkInterface var3
String var3
int var3
var3
var3
char var3
InetAddress var4
NetworkInterface var4
String var4
Enumeration var5
Enumeration var5
char var5
InetAddress var6
InetAddress var6
String var7
String var8
String var9

Методы (32)

МодификаторыВозвратСигнатура
AddressType AddressType(Predicate<InetAddress> nullxx)
abstract MC_ORG_LOCAL MC_ORG_LOCAL(InetAddress::isMCOrgLocal)
abstract throw new RuntimeExceptionthrow new RuntimeException(var1)
static boolean addressMatchesAllboolean addressMatchesAll(InetAddress var0, @Nonnull NetworkUtil.AddressType... var1)
static boolean addressMatchesAnyboolean addressMatchesAny(InetAddress var0)
static boolean addressMatchesAnyboolean addressMatchesAny(InetAddress var0, @Nonnull NetworkUtil.AddressType... var1)
for for(NetworkUtil.AddressType var10 : var0)
for for(NetworkUtil.AddressType var14 : var1)
for for(NetworkUtil.AddressType var5 : var1)
for for(NetworkUtil.AddressType var5 : var1)
abstract for for(int var4 = 0; var4 < var0.length()
abstract for for(int var2 = 0; var2 < var0.length()
abstract return getFirstAddressWithreturn getFirstAddressWith(var0, null)
abstract return getFirstAddressWithreturn getFirstAddressWith(null, var0)
if if(var4 instanceof Inet4Address)
if if(var4 instanceof Inet6Address && var0 == null)
if if(var0 != null)
if if(var1 != null)
if if(var6 instanceof Inet4Address)
if if(var6 instanceof Inet6Address && var2 == null)
if if(var0 == null)
if if(var5 >= '0' && var5 <= '9')
if if(var2 == -1)
if if(var3 > 255)
if if(++var2 > 3)
if if(var5 != '.')
if if(var2 <= 0)
if if(var1 > 3)
if if(var3 == ':')
static boolean isAcceptableHostNameboolean isAcceptableHostName(@Nullable String var0)
static boolean isIPv4Literalboolean isIPv4Literal(@Nonnull String var0)
static boolean isLikelyIPv6Literalboolean isLikelyIPv6Literal(@Nonnull String var0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.common.util;

class="kw">import java.io.BufferedReader;
class="kw">import java.io.IOException;
class="kw">import java.net.Inet4Address;
class="kw">import java.net.Inet6Address;
class="kw">import java.net.InetAddress;
class="kw">import java.net.InetSocketAddress;
class="kw">import java.net.NetworkInterface;
class="kw">import java.net.SocketException;
class="kw">import java.net.UnknownHostException;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Enumeration;
class="kw">import java.util.Locale;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class NetworkUtil {
   class="kw">public class="kw">static Inet6Address ANY_IPV6_ADDRESS;
   class="kw">public class="kw">static Inet4Address ANY_IPV4_ADDRESS;
   class="kw">public class="kw">static Inet6Address LOOPBACK_IPV6_ADDRESS;
   class="kw">public class="kw">static Inet4Address LOOPBACK_IPV4_ADDRESS;

   class="kw">public NetworkUtil() {
   }

   @Nullable
   class="kw">public class="kw">static InetAddress getFirstNonLoopbackAddress() class="kw">throws SocketException {
      InetAddress var0 = null;
      Enumeration var1 = NetworkInterface.getNetworkInterfaces();

      while (var1.hasMoreElements()) {
         NetworkInterface var2 = var1.nextElement();
         if (!var2.isLoopback() && var2.isUp()) {
            Enumeration var3 = var2.getInetAddresses();

            while (var3.hasMoreElements()) {
               InetAddress var4 = var3.nextElement();
               if (!var4.isLoopbackAddress() && !var4.isAnyLocalAddress() && !var4.isLinkLocalAddress()) {
                  if (var4 class="kw">instanceof Inet4Address) {
                     class="kw">return var4;
                  }

                  if (var4 class="kw">instanceof Inet6Address && var0 == null) {
                     var0 = var4;
                  }
               }
            }
         }
      }

      class="kw">return var0;
   }

   @Nullable
   class="kw">public class="kw">static InetAddress getFirstAddressWith(NetworkUtil.AddressType... var0) class="kw">throws SocketException {
      class="kw">return getFirstAddressWith(var0, null);
   }

   @Nullable
   class="kw">public class="kw">static InetAddress getFirstAddressWithout(NetworkUtil.AddressType... var0) class="kw">throws SocketException {
      class="kw">return getFirstAddressWith(null, var0);
   }

   @Nullable
   class="kw">public class="kw">static InetAddress getFirstAddressWith(@Nullable NetworkUtil.AddressType[] var0, @Nullable NetworkUtil.AddressType[] var1) class="kw">throws SocketException {
      InetAddress var2 = null;
      Enumeration var3 = NetworkInterface.getNetworkInterfaces();

      while (var3.hasMoreElements()) {
         NetworkInterface var4 = var3.nextElement();
         if (!var4.isLoopback() && var4.isUp()) {
            Enumeration var5 = var4.getInetAddresses();

            label70:
            while (var5.hasMoreElements()) {
               InetAddress var6 = var5.nextElement();
               if (var0 != null) {
                  for (NetworkUtil.AddressType var10 : var0) {
                     if (!var10.predicate.test(var6)) {
                        class="kw">continue label70;
                     }
                  }
               }

               if (var1 != null) {
                  for (NetworkUtil.AddressType var14 : var1) {
                     if (var14.predicate.test(var6)) {
                        class="kw">continue label70;
                     }
                  }
               }

               if (var6 class="kw">instanceof Inet4Address) {
                  class="kw">return var6;
               }

               if (var6 class="kw">instanceof Inet6Address && var2 == null) {
                  var2 = var6;
               }
            }
         }
      }

      class="kw">return var2;
   }

   class="kw">public class="kw">static boolean addressMatchesAll(InetAddress var0, @Nonnull NetworkUtil.AddressType... var1) {
      for (NetworkUtil.AddressType var5 : var1) {
         if (!var5.predicate.test(var0)) {
            class="kw">return false;
         }
      }

      class="kw">return true;
   }

   class="kw">public class="kw">static boolean addressMatchesAny(InetAddress var0) {
      class="kw">return addressMatchesAny(var0, NetworkUtil.AddressType.values());
   }

   class="kw">public class="kw">static boolean addressMatchesAny(InetAddress var0, @Nonnull NetworkUtil.AddressType... var1) {
      for (NetworkUtil.AddressType var5 : var1) {
         if (var5.predicate.test(var0)) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   @Nonnull
   class="kw">public class="kw">static String toSocketString(@Nonnull InetSocketAddress var0) {
      String var3;
      if (var0.getAddress() class="kw">instanceof Inet6Address) {
         String var2 = var0.getHostString();
         if (var2.indexOf(58) >= 0) {
            var3 = "[" + var2 + "]";
         } else {
            var3 = var2;
         }

         var3 = var3 + ":" + var0.getPort();
      } else {
         var3 = var0.getHostString() + ":" + var0.getPort();
      }

      class="kw">return var3;
   }

   @Nullable
   class="kw">public class="kw">static String getHostName() {
      String var0 = null;

      try {
         InetAddress var1 = InetAddress.getLocalHost();
         var0 = var1.getHostName();
         if (isAcceptableHostName(var0)) {
            class="kw">return var0;
         }

         String var2 = var1.getCanonicalHostName();
         if (isAcceptableHostName(var2)) {
            class="kw">return var2;
         }
      } catch (UnknownHostException var10) {
      }

      String var13 = System.getenv("HOSTNAME");
      if (isAcceptableHostName(var13)) {
         class="kw">return var13;
      }

      var13 = System.getenv("COMPUTERNAME");
      if (isAcceptableHostName(var13)) {
         class="kw">return var13;
      }

      var13 = firstLineIfExists("/etc/hostname");
      if (isAcceptableHostName(var13)) {
         class="kw">return var13;
      }

      var13 = firstLineIfExists("/proc/sys/kernel/hostname");
      if (isAcceptableHostName(var13)) {
         class="kw">return var13;
      }

      try {
         Enumeration var17 = NetworkInterface.getNetworkInterfaces();

         while (var17.hasMoreElements()) {
            NetworkInterface var3 = var17.nextElement();
            if (var3.isUp() && !var3.isLoopback() && !var3.isPointToPoint()) {
               String var4 = var3.getName().toLowerCase(Locale.ROOT);
               if (!var4.startsWith("lo")
                  && !var4.startsWith("docker")
                  && !var4.startsWith("br-")
                  && !var4.startsWith("veth")
                  && !var4.startsWith("virbr")
                  && !var4.startsWith("utun")
                  && !var4.startsWith("wg")
                  && !var4.startsWith("zt")) {
                  Enumeration var5 = var3.getInetAddresses();

                  while (var5.hasMoreElements()) {
                     InetAddress var6 = var5.nextElement();
                     if (!var6.isLoopbackAddress() && !var6.isLinkLocalAddress() && !var6.isAnyLocalAddress()) {
                        String var7 = var6.getHostAddress();
                        String var8 = var6.getHostName();
                        if (var8 != null && !var8.equals(var7) && isAcceptableHostName(var8)) {
                           class="kw">return var8;
                        }

                        String var9 = var6.getCanonicalHostName();
                        if (var9 != null && !var9.equals(var7) && isAcceptableHostName(var9)) {
                           class="kw">return var9;
                        }
                     }
                  }
               }
            }
         }
      } catch (SocketException var11) {
      }

      class="kw">return null;
   }

   @Nullable
   class="kw">private class="kw">static String firstLineIfExists(String var0) {
      try {
         Path var1 = Path.of(var0);
         if (!Files.isRegularFile(var1)) {
            class="kw">return null;
         }

         try (BufferedReader var2 = Files.newBufferedReader(var1, StandardCharsets.UTF_8)) {
            String var3 = var2.readLine();
            class="kw">return var3 == null ? null : var3.trim();
         }
      } catch (IOException var7) {
         class="kw">return null;
      }
   }

   class="kw">private class="kw">static boolean isAcceptableHostName(@Nullable String var0) {
      if (var0 == null) {
         class="kw">return false;
      } else {
         var0 = var0.trim();
         if (var0.isEmpty()) {
            class="kw">return false;
         } else {
            String var1 = var0.toLowerCase(Locale.ROOT);
            if (isIPv4Literal(var1) || isLikelyIPv6Literal(var1)) {
               class="kw">return false;
            } else if ("localhost".equals(var1) || "ip6-localhost".equals(var1) || "ip6-loopback".equals(var1) || "docker-desktop".equals(var1)) {
               class="kw">return false;
            } else {
               class="kw">return !var1.contains("docker") && !var1.contains("wsl") && !var1.endsWith(".internal") && !var1.endsWith(".localdomain")
                  ? !var1.endsWith(".local")
                  : false;
            }
         }
      }
   }

   class="kw">private class="kw">static boolean isIPv4Literal(@Nonnull String var0) {
      int var1 = 0;
      int var2 = -1;
      int var3 = 0;

      for (int var4 = 0; var4 < var0.length(); var4++) {
         char var5 = var0.charAt(var4);
         if (var5 >= '0' && var5 <= '9') {
            if (var2 == -1) {
               var2 = 0;
            }

            var3 = var3 * 10 + (var5 - '0');
            if (var3 > 255) {
               class="kw">return false;
            }

            if (++var2 > 3) {
               class="kw">return false;
            }
         } else {
            if (var5 != '.') {
               class="kw">return false;
            }

            if (var2 <= 0) {
               class="kw">return false;
            }

            var1++;
            var2 = -1;
            var3 = 0;
            if (var1 > 3) {
               class="kw">return false;
            }
         }
      }

      class="kw">return var1 == 3 && var2 > 0;
   }

   class="kw">private class="kw">static boolean isLikelyIPv6Literal(@Nonnull String var0) {
      boolean var1 = false;

      for (int var2 = 0; var2 < var0.length(); var2++) {
         char var3 = var0.charAt(var2);
         if (var3 == ':') {
            var1 = true;
         } else if ((var3 < '0' || var3 > '9') && (var3 < 'a' || var3 > 'f') && (var3 < 'A' || var3 > 'F')) {
            class="kw">return false;
         }
      }

      class="kw">return var1;
   }

   class="kw">static {
      try {
         ANY_IPV6_ADDRESS = Inet6Address.getByAddress("::", new byte[16], null);
         ANY_IPV4_ADDRESS = (Inet4Address)Inet4Address.getByAddress("0.0.0.0", new byte[4]);
         LOOPBACK_IPV6_ADDRESS = Inet6Address.getByAddress("::1", new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, null);
         LOOPBACK_IPV4_ADDRESS = (Inet4Address)Inet4Address.getByAddress("127.0.0.1", new byte[]{127, 0, 0, 1});
      } catch (UnknownHostException var1) {
         throw new RuntimeException(var1);
      }
   }

   class="kw">public enum AddressType {
      MULTICAST(InetAddress::isMulticastAddress),
      ANY_LOCAL(InetAddress::isAnyLocalAddress),
      LOOPBACK(InetAddress::isLoopbackAddress),
      LINK_LOCAL(InetAddress::isLinkLocalAddress),
      SITE_LOCAL(InetAddress::isSiteLocalAddress),
      MC_GLOBAL(InetAddress::isMCGlobal),
      MC_SITE_LOCAL(InetAddress::isMCSiteLocal),
      MC_ORG_LOCAL(InetAddress::isMCOrgLocal);

      class="kw">private class="kw">final Predicate<InetAddress> predicate;

      AddressType(Predicate<InetAddress> nullxx) {
         this.predicate = nullxx;
      }
   }
}