Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

      • 网络
      • NetUtil
        • 主要功能
        • IP地址处理
          • longToIpv4(long longIP)
          • ipv4ToLong(String strIP)
          • isInnerIP(String ip)
          • getLocalhost()
          • getLocalhostStr()
        • 端口管理
          • isValidPort(int port)
          • isUsableLocalPort(int port)
          • getUsableLocalPort()
          • getUsableLocalPort(int minPort)
          • getUsableLocalPort(int minPort, int maxPort)
          • getUsableLocalPorts(int numRequested, int minPort, int maxPort)
        • 网络连接
          • isOpen(String host, int port)
          • isOpen(String host, int port, int timeout)
          • connect(String host, int port)
          • connect(String host, int port, int timeout)
        • 本地网络信息
          • getLocalMacAddress()
          • getLocalMacAddressStr()
          • getNetworkInterfaces()
        • URL处理
          • normalize(String url)
          • encode(String url)
          • decode(String url)
        • DNS解析
          • lookupDomain(String domain)
          • reverseLookup(String ip)
        • 代理支持
          • createProxy(String host, int port)
          • createProxy(String host, int port, String username, String password)
        • 注意事项
        • 总结
      • Ipv4Util
      • Ipv6Util
      • MacAddressUtil
      • KeyManagerUtil
      • SSL上下文工具-SSLContextUtil
      • 信任管理器工具-TrustManagerUtil
      • URL构建器-UrlBuilder
      • URL协议工具-UrlProtocolUtil
      • URL查询工具-UrlQueryUtil
      • URL工具-UrlUtil
    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 网络(net)
Hutool
2026-01-03
目录

NetUtil

NetUtil是Hutool中用于处理网络相关操作的核心工具类,提供了丰富的网络操作功能,包括端口检测、网络连接、本地IP获取等。

# 主要功能

  • IP地址处理:IP地址的解析、转换、验证等
  • 端口管理:端口检测、可用端口获取等
  • 网络连接:TCP/UDP连接检测、代理连接等
  • 本地网络信息:本地IP、MAC地址获取等
  • URL处理:URL的解析、编码、解码等
  • DNS解析:域名解析等

# IP地址处理

# longToIpv4(long longIP)

将long类型的IP地址转换为IPv4地址字符串。

String ip = NetUtil.longToIpv4(3232235777L);
// 输出: 192.168.1.1

# ipv4ToLong(String strIP)

将IPv4地址字符串转换为long类型。

long ipLong = NetUtil.ipv4ToLong("192.168.1.1");
// 输出: 3232235777

# isInnerIP(String ip)

判断是否为内网IPv4地址。

boolean isInner = NetUtil.isInnerIP("192.168.1.1");
// 输出: true

boolean isInner2 = NetUtil.isInnerIP("202.103.24.68");
// 输出: false

# getLocalhost()

获取本地主机对象。

InetAddress localhost = NetUtil.getLocalhost();
// 输出: localhost/127.0.0.1

# getLocalhostStr()

获取本地IP地址字符串。

String localIp = NetUtil.getLocalhostStr();
// 输出: 192.168.1.100

# 端口管理

# isValidPort(int port)

判断端口是否有效(0~65535)。

boolean isValid = NetUtil.isValidPort(8080);
// 输出: true

boolean isValid2 = NetUtil.isValidPort(70000);
// 输出: false

# isUsableLocalPort(int port)

检测本地端口是否可用。

boolean isUsable = NetUtil.isUsableLocalPort(8080);
// 输出: true

# getUsableLocalPort()

查找1024~65535范围内的可用端口。

int port = NetUtil.getUsableLocalPort();
// 输出: 可用的随机端口(如:1025)

# getUsableLocalPort(int minPort)

查找指定最小值以上的可用端口。

int port = NetUtil.getUsableLocalPort(8000);
// 输出: 8000以上的可用端口

# getUsableLocalPort(int minPort, int maxPort)

查找指定范围内的可用端口。

int port = NetUtil.getUsableLocalPort(8000, 9000);
// 输出: 8000~9000之间的可用端口

# getUsableLocalPorts(int numRequested, int minPort, int maxPort)

获取多个本地可用端口。

TreeSet<Integer> ports = NetUtil.getUsableLocalPorts(3, 8000, 9000);
// 输出: [8000, 8001, 8002](示例,实际为随机可用端口)

# 网络连接

# isOpen(String host, int port)

检测远程主机端口是否开放。

boolean isOpen = NetUtil.isOpen("www.baidu.com", 80);
// 输出: true

boolean isOpen2 = NetUtil.isOpen("www.baidu.com", 8888);
// 输出: false

# isOpen(String host, int port, int timeout)

检测远程主机端口是否开放,自定义超时时间。

boolean isOpen = NetUtil.isOpen("www.baidu.com", 80, 5000);
// 输出: true

# connect(String host, int port)

创建Socket连接。

try (Socket socket = NetUtil.connect("www.baidu.com", 80)) {
    // 连接成功,可以进行后续操作
    Console.log("连接成功");
} catch (IOException e) {
    // 连接失败
    Console.log("连接失败: " + e.getMessage());
}

# connect(String host, int port, int timeout)

创建Socket连接,自定义超时时间。

try (Socket socket = NetUtil.connect("www.baidu.com", 80, 5000)) {
    // 连接成功,可以进行后续操作
    Console.log("连接成功");
} catch (IOException e) {
    // 连接失败
    Console.log("连接失败: " + e.getMessage());
}

# 本地网络信息

# getLocalMacAddress()

获取本地MAC地址。

String mac = NetUtil.getLocalMacAddress();
// 输出: 00:00:00:00:00:00(示例)

# getLocalMacAddressStr()

获取本地MAC地址字符串,格式为无分隔符的十六进制。

String macStr = NetUtil.getLocalMacAddressStr();
// 输出: 000000000000(示例)

# getNetworkInterfaces()

获取所有网络接口。

Enumeration<NetworkInterface> interfaces = NetUtil.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
    NetworkInterface networkInterface = interfaces.nextElement();
    Console.log(networkInterface.getName());
}

# URL处理

# normalize(String url)

标准化URL,补全协议头。

String normalizedUrl = NetUtil.normalize("www.baidu.com");
// 输出: http://www.baidu.com

String normalizedUrl2 = NetUtil.normalize("https://www.baidu.com");
// 输出: https://www.baidu.com

# encode(String url)

URL编码。

String encodedUrl = NetUtil.encode("http://www.baidu.com?name=测试");
// 输出: http://www.baidu.com?name=%E6%B5%8B%E8%AF%95

# decode(String url)

URL解码。

String decodedUrl = NetUtil.decode("http://www.baidu.com?name=%E6%B5%8B%E8%AF%95");
// 输出: http://www.baidu.com?name=测试

# DNS解析

# lookupDomain(String domain)

解析域名,获取对应的IP地址列表。

List<String> ips = NetUtil.lookupDomain("www.baidu.com");
// 输出: [14.215.177.39, 14.215.177.38]

# reverseLookup(String ip)

反向DNS解析,根据IP地址获取域名。

String domain = NetUtil.reverseLookup("14.215.177.39");
// 输出: 可能为空或对应的域名

# 代理支持

# createProxy(String host, int port)

创建HTTP代理。

Proxy proxy = NetUtil.createProxy("127.0.0.1", 8080);
// 可以用于URLConnection或HttpClient

# createProxy(String host, int port, String username, String password)

创建带认证的HTTP代理。

Proxy proxy = NetUtil.createProxy("127.0.0.1", 8080, "username", "password");
// 可以用于URLConnection或HttpClient

# 注意事项

  1. 网络连接:网络操作可能会抛出IOException,需要注意异常处理
  2. 超时设置:进行远程主机操作时,建议设置合理的超时时间,避免长时间阻塞
  3. 权限问题:某些操作(如获取MAC地址)可能需要管理员权限
  4. DNS解析:DNS解析结果可能会有缓存,导致获取的IP地址不是最新的
  5. 端口范围:有效端口范围是0~65535,其中0~1023是系统保留端口

# 总结

NetUtil提供了丰富的网络操作功能,涵盖了IP地址处理、端口管理、网络连接、本地网络信息获取、URL处理和DNS解析等多个方面。通过使用NetUtil,可以大大简化Java中的网络操作,提高开发效率。

无论是网络诊断、IP地址管理还是网络连接,NetUtil都能提供简洁高效的解决方案。

网络
Ipv4Util

← 网络 Ipv4Util→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式