Class NetKit

java.lang.Object
org.miaixz.bus.core.xyz.NetKit

public class NetKit extends Object
网络相关工具
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • NetKit

      public NetKit()
  • Method Details

    • longToIpv4

      public static String longToIpv4(long longIP)
      根据long值获取ip v4地址
      Parameters:
      longIP - IP的long表示形式
      Returns:
      IP V4 地址
      See Also:
    • ipv4ToLong

      public static long ipv4ToLong(String strIP)
      根据ip地址计算出long型的数据
      Parameters:
      strIP - IP V4 地址
      Returns:
      long值
      See Also:
    • isUsableLocalPort

      public static boolean isUsableLocalPort(int port)
      检测本地端口可用性
      Parameters:
      port - 被检测的端口
      Returns:
      是否可用
    • isValidPort

      public static boolean isValidPort(int port)
      是否为有效的端口 此方法并不检查端口是否被占用
      Parameters:
      port - 端口号
      Returns:
      是否有效
    • getUsableLocalPort

      public static int getUsableLocalPort()
      查找1024~65535范围内的可用端口 此方法只检测给定范围内的随机一个端口,检测65535-1024次 来自org.springframework.util.SocketUtils
      Returns:
      可用的端口
    • getUsableLocalPort

      public static int getUsableLocalPort(int minPort)
      查找指定范围内的可用端口,最大值为65535 此方法只检测给定范围内的随机一个端口,检测65535-minPort次 来自org.springframework.util.SocketUtils
      Parameters:
      minPort - 端口最小值(包含)
      Returns:
      可用的端口
    • getUsableLocalPort

      public static int getUsableLocalPort(int minPort, int maxPort)
      查找指定范围内的可用端口 此方法只检测给定范围内的随机一个端口,检测maxPort-minPort次 来自org.springframework.util.SocketUtils
      Parameters:
      minPort - 端口最小值(包含)
      maxPort - 端口最大值(包含)
      Returns:
      可用的端口
    • getUsableLocalPorts

      public static TreeSet<Integer> getUsableLocalPorts(int numRequested, int minPort, int maxPort)
      获取多个本地可用端口 来自org.springframework.util.SocketUtils
      Parameters:
      numRequested - 尝试次数
      minPort - 端口最小值(包含)
      maxPort - 端口最大值(包含)
      Returns:
      可用的端口
    • isInnerIP

      public static boolean isInnerIP(String ipAddress)
      判定是否为内网IPv4 私有IP:
       A类 10.0.0.0-10.255.255.255
       B类 172.16.0.0-172.31.255.255
       C类 192.168.0.0-192.168.255.255
       
      当然,还有127这个网段是环回地址
      Parameters:
      ipAddress - IP地址
      Returns:
      是否为内网IP
      See Also:
    • toAbsoluteUrl

      public static String toAbsoluteUrl(String absoluteBasePath, String relativePath)
      相对URL转换为绝对URL
      Parameters:
      absoluteBasePath - 基准路径,绝对
      relativePath - 相对路径
      Returns:
      绝对URL
    • hideIpPart

      public static String hideIpPart(String ip)
      隐藏掉IP地址的最后一部分为 * 代替
      Parameters:
      ip - IP地址
      Returns:
      隐藏部分后的IP
    • hideIpPart

      public static String hideIpPart(long ip)
      隐藏掉IP地址的最后一部分为 * 代替
      Parameters:
      ip - IP地址
      Returns:
      隐藏部分后的IP
    • getIpByHost

      public static String getIpByHost(String hostName)
      通过域名得到IP
      Parameters:
      hostName - HOST
      Returns:
      ip address or hostName if UnknownHostException
    • getNetworkInterface

      public static NetworkInterface getNetworkInterface(String name)
      获取指定名称的网卡信息
      Parameters:
      name - 网络接口名,例如Linux下默认是eth0
      Returns:
      网卡,未找到返回null
    • getNetworkInterfaces

      public static Collection<NetworkInterface> getNetworkInterfaces()
      获取本机所有网卡
      Returns:
      所有网卡,异常返回null
    • localIpv4s

      public static LinkedHashSet<String> localIpv4s()
      获得本机的IPv4地址列表 返回的IP列表有序,按照系统设备顺序
      Returns:
      IP地址列表 LinkedHashSet
    • toIpList

      public static LinkedHashSet<String> toIpList(Set<InetAddress> addressList)
      地址列表转换为IP地址列表
      Parameters:
      addressList - 地址Inet4Address 列表
      Returns:
      IP地址字符串列表
    • localIps

      public static LinkedHashSet<String> localIps()
      获得本机的IP地址列表(包括Ipv4和Ipv6) 返回的IP列表有序,按照系统设备顺序
      Returns:
      IP地址列表 LinkedHashSet
    • localAddressList

      public static LinkedHashSet<InetAddress> localAddressList(Predicate<InetAddress> addressPredicate)
      获取所有满足过滤条件的本地IP地址对象
      Parameters:
      addressPredicate - 过滤器,Predicate.test(Object)true保留,null表示不过滤,获取所有地址
      Returns:
      过滤后的地址对象列表
    • localAddressList

      public static LinkedHashSet<InetAddress> localAddressList(Predicate<NetworkInterface> networkInterfaceFilter, Predicate<InetAddress> addressPredicate)
      获取所有满足过滤条件的本地IP地址对象
      Parameters:
      networkInterfaceFilter - 过滤器,null表示不过滤,获取所有网卡
      addressPredicate - 过滤器,Predicate.test(Object)true保留,null表示不过滤,获取所有地址
      Returns:
      过滤后的地址对象列表
    • getLocalhostStringV4

      public static String getLocalhostStringV4()
      获取本机网卡IP地址,这个地址为所有网卡中非回路地址的第一个 如果获取失败调用 InetAddress.getLocalHost()方法获取。 此方法不会抛出异常,获取失败将返回null

      参考: http://stackoverflow.com/questions/9481865/getting-the-ip-address-of-the-current-machine-using-java

      Returns:
      本机网卡IP地址,获取失败返回null
    • getLocalhostV4

      public static InetAddress getLocalhostV4()
      获取本机网卡IPv4地址,规则如下:
      • 必须非回路(loopback)地址、非局域网地址(siteLocal)、IPv4地址
      • 多网卡则返回第一个满足条件的地址
      • 如果无满足要求的地址,调用 InetAddress.getLocalHost() 获取地址

      此方法不会抛出异常,获取失败将返回null

      Returns:
      本机网卡IP地址,获取失败返回null
    • getLocalMacAddressV4

      public static String getLocalMacAddressV4()
      获得本机MAC地址,默认使用获取到的IPv4本地地址对应网卡
      Returns:
      本机MAC地址
    • createAddress

      public static InetSocketAddress createAddress(String host, int port)
      Parameters:
      host - 域名或IP地址,空表示任意地址
      port - 端口,0表示系统分配临时端口
      Returns:
      InetSocketAddress
    • netCat

      public static void netCat(String host, int port, boolean isBlock, ByteBuffer data) throws InternalException
      简易的使用Socket发送数据
      Parameters:
      host - Server主机
      port - Server端口
      isBlock - 是否阻塞方式
      data - 需要发送的数据
      Throws:
      InternalException - IO异常
    • netCat

      public static void netCat(String host, int port, byte[] data) throws InternalException
      使用普通Socket发送数据
      Parameters:
      host - Server主机
      port - Server端口
      data - 数据
      Throws:
      InternalException - IO异常
    • isInRange

      public static boolean isInRange(String ip, String cidr)
      是否在CIDR规则配置范围内 方法来自:【成都】小邓
      Parameters:
      ip - 需要验证的IP
      cidr - CIDR规则
      Returns:
      是否在范围内
    • idnToASCII

      public static String idnToASCII(String unicode)
      Unicode域名转puny code
      Parameters:
      unicode - Unicode域名
      Returns:
      puny code
    • getMultistageReverseProxyIp

      public static String getMultistageReverseProxyIp(String ip)
      从多级反向代理中获得第一个非unknown IP地址
      Parameters:
      ip - 获得的IP地址
      Returns:
      第一个非unknown IP地址
    • isUnknown

      public static boolean isUnknown(String checkString)
      检测给定字符串是否为未知,多用于检测HTTP请求相关
      Parameters:
      checkString - 被检测的字符串
      Returns:
      是否未知
    • ping

      public static boolean ping(String ip)
      检测IP地址是否能ping通
      Parameters:
      ip - IP地址
      Returns:
      返回是否ping通
    • ping

      public static boolean ping(String ip, int timeout)
      检测IP地址是否能ping通
      Parameters:
      ip - IP地址
      timeout - 检测超时(毫秒)
      Returns:
      是否ping通
    • parseCookies

      public static List<HttpCookie> parseCookies(String cookieStr)
      解析Cookie信息
      Parameters:
      cookieStr - Cookie字符串
      Returns:
      cookie字符串
    • isOpen

      public static boolean isOpen(InetSocketAddress address, int timeout)
      检查远程端口是否开启
      Parameters:
      address - 远程地址
      timeout - 检测超时
      Returns:
      远程端口是否开启
    • setGlobalAuthenticator

      public static void setGlobalAuthenticator(String user, char[] pass)
      设置全局验证
      Parameters:
      user - 用户名
      pass - 密码,考虑安全,此处不使用String
    • setGlobalAuthenticator

      public static void setGlobalAuthenticator(Authenticator authenticator)
      设置全局验证
      Parameters:
      authenticator - 验证器
    • getDnsInfo

      public static List<String> getDnsInfo(String hostName, String... attrNames)
      获取DNS信息,如TXT信息:
           NetKit.attrNames("xxx.cn", "TXT")
       
      Parameters:
      hostName - 主机域名
      attrNames - 属性
      Returns:
      DNS信息
    • getAddressName

      public static String getAddressName(InetAddress address)
      获取地址名称,如果无名称返回地址 如果提供的地址为null返回null
      Parameters:
      address - InetAddress,提供null返回null
      Returns:
      地址名称或地址
    • getMacAddress

      public static String getMacAddress(InetAddress inetAddress)
      获得指定地址信息中的MAC地址,使用分隔符“-”
      Parameters:
      inetAddress - InetAddress
      Returns:
      MAC地址,用-分隔
    • getMacAddress

      public static String getMacAddress(InetAddress inetAddress, String separator)
      获得指定地址信息中的MAC地址
      Parameters:
      inetAddress - InetAddress
      separator - 分隔符,推荐使用“-”或者“:”
      Returns:
      MAC地址,用-分隔
    • getHardwareAddress

      public static byte[] getHardwareAddress(InetAddress inetAddress)
      获得指定地址信息中的硬件地址(MAC地址)
      Parameters:
      inetAddress - InetAddress
      Returns:
      硬件地址
    • toMacAddress

      public static String toMacAddress(byte[] mac, String separator)
      将bytes类型的mac地址转换为可读字符串,通常地址每个byte位使用16进制表示,并用指定分隔符分隔
      Parameters:
      mac - MAC地址(网卡硬件地址)
      separator - 分隔符
      Returns:
      MAC地址字符串