首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何检查字符串是IPv4 / IPv6还是域名?(Java)

要检查字符串是IPv4、IPv6还是域名,可以使用Java的InetAddress类和一些辅助方法。以下是一个示例代码,展示了如何实现这一功能:

代码语言:txt
复制
import java.net.InetAddress;
import java.net.UnknownHostException;

public class IPAddressChecker {

    public static void main(String[] args) {
        String ipOrDomain = "example.com"; // 替换为你要检查的字符串
        checkIPAddress(ipOrDomain);
    }

    public static void checkIPAddress(String ipOrDomain) {
        try {
            InetAddress address = InetAddress.getByName(ipOrDomain);
            if (address.getHostAddress().equals(ipOrDomain)) {
                System.out.println(ipOrDomain + " is an IP address.");
                if (isIPv4(ipOrDomain)) {
                    System.out.println("It is an IPv4 address.");
                } else if (isIPv6(ipOrDomain)) {
                    System.out.println("It is an IPv6 address.");
                }
            } else {
                System.out.println(ipOrDomain + " is a domain name.");
            }
        } catch (UnknownHostException e) {
            System.out.println(ipOrDomain + " is neither a valid IP address nor a domain name.");
        }
    }

    public static boolean isIPv4(String ip) {
        try {
            if (ip == null || ip.isEmpty()) {
                return false;
            }

            String[] parts = ip.split("\\.");
            if (parts.length != 4) {
                return false;
            }

            for (String s : parts) {
                int i = Integer.parseInt(s);
                if ((i < 0) || (i > 255)) {
                    return false;
                }
            }

            return !ip.endsWith(".");
        } catch (NumberFormatException nfe) {
            return false;
        }
    }

    public static boolean isIPv6(String ip) {
        try {
            if (ip == null || ip.isEmpty()) {
                return false;
            }

            String[] parts = ip.split(":");
            if (parts.length < 3 || parts.length > 8) {
                return false;
            }

            for (String s : parts) {
                if (s.length() > 4) {
                    return false;
                }
                try {
                    int value = Integer.parseInt(s, 16);
                    if (value < 0 || value > 0xFFFF) {
                        return false;
                    }
                } catch (NumberFormatException nfe) {
                    return false;
                }
            }

            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

解释

  1. InetAddress.getByName(ipOrDomain): 这个方法会尝试解析给定的字符串,如果它是一个有效的IP地址或域名,它会返回一个InetAddress对象。
  2. address.getHostAddress().equals(ipOrDomain): 如果解析后的IP地址与原始字符串相同,说明它是一个IP地址。
  3. isIPv4(ipOrDomain)isIPv6(ipOrDomain): 这两个方法分别用于检查字符串是否是有效的IPv4或IPv6地址。

应用场景

  • 网络配置: 在配置网络设备或应用程序时,需要确定输入的字符串是IP地址还是域名。
  • 数据验证: 在处理用户输入或外部数据时,确保数据的格式正确。
  • 日志分析: 在分析网络日志时,可能需要区分IP地址和域名。

参考链接

通过这种方式,你可以有效地检查一个字符串是IPv4、IPv6还是域名,并根据需要进行相应的处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券