摘要
近期系統用到判斷ip地址和ping場景,發現兩個比較好用得方法,不依賴第三方包,特此記錄一下
環境
JDK1.8
代碼
@Test
public void test() throws Exception {
String address1 = "127.0.0.1";
String address2 = "127.0.0.256";
String address3 = "fe80::2ca6:bfce:e67f:c0a6%21";
String address4 = "10.0.0.1";
log.info("address {}, result is {}", address1, checkIpAddress(address1));
log.info("address {}, result is {}", address2, checkIpAddress(address2));
log.info("address {}, result is {}", address3, checkIpAddress(address3));
// ping, 3秒超時
log.info(" address {} reachable: {}", address3, InetAddress.getAllByName(address3)[0].isReachable(3000));
log.info(" address {} reachable: {}", address4, InetAddress.getAllByName(address4)[0].isReachable(3000));
}
private String checkIpAddress(String ipAddress) {
InetAddress inetAddress;
try {
inetAddress = InetAddress.getAllByName(ipAddress)[0];
if (inetAddress instanceof Inet4Address) {
return "ipv4";
} else {
return "ipv6";
}
} catch (UnknownHostException e) {
return "pattern error!";
}
}
運行結果
15:35:41.830 [main] INFO - address 127.0.0.1, result is ipv4
15:35:41.844 [main] INFO - address 127.0.0.256, result is pattern error!
15:35:41.845 [main] INFO - address fe80::2ca6:bfce:e67f:c0a6%21, result is ipv6
15:35:41.847 [main] INFO - address fe80::2ca6:bfce:e67f:c0a6%21 reachable: true
15:35:44.499 [main] INFO - address 10.0.0.1 reachable: false