要检查字符串是IPv4、IPv6还是域名,可以使用Java的InetAddress
类和一些辅助方法。以下是一个示例代码,展示了如何实现这一功能:
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;
}
}
}
InetAddress
对象。通过这种方式,你可以有效地检查一个字符串是IPv4、IPv6还是域名,并根据需要进行相应的处理。
没有搜到相关的文章