importjava.io.IOException;importjava.net.Inet4Address;importjava.net.Inet6Address;importjava.net.InetAddress;importjava.net.NetworkInterface;importjava.net.UnknownHostException;importjava.util.Enumeration;importjava.util.HashSet;importjava.util.Set;/*** 类注解
*
*@author尘世间迷茫的小书童
* @date 2020年06月23日 17:31*/
public classDemo {public static voidmain(String[] args) {
Set set =getIpAddress();if(set.size() > 0) {
set.forEach(ip->{
System.out.println("本机ip: " +ip);
});
}
set.remove("127.0.0.1");
scannerNetwork(set);
System.out.println("扫描完毕...");
System.exit(0);
}/*** 获取本机的IP地址(包括ipv4和ipv6)
* 包含回环地址127.0.0.1和0:0:0:0:0:0:0:1*/
private static SetgetIpAddress() {
Set ipList = new HashSet<>();try{
Enumeration allNetInterfaces =NetworkInterface.getNetworkInterfaces();
InetAddress ip= null;while(allNetInterfaces.hasMoreElements()) {
NetworkInterface netInterface=(NetworkInterface) allNetInterfaces.nextElement();//排除虚拟接口和没有启动运行的接口
if (netInterface.isVirtual() || !netInterface.isUp()) {continue;
}else{
Enumeration addresses =netInterface.getInetAddresses();while(addresses.hasMoreElements()) {
ip=addresses.nextElement();//if (ip != null && (ip instanceof Inet4Address || ip instanceof Inet6Address)) {//ipList.add(ip.getHostAddress());//}
if (ip != null && (ip instanceofInet4Address)) {
ipList.add(ip.getHostAddress());
}
}
}
}
}catch(Exception e) {
e.printStackTrace();
}returnipList;
}/*** 根据本机ip扫描局域网设备
*@paramset*/
private static void scannerNetwork(Setset) {try{
set.forEach(address->{//设置IP地址网段
String ips =getNetworkSegment(address);
System.out.println("开始扫描 " + ips + "网段...");
String ip;
InetAddress addip= null;//遍历IP地址
for (int i = 1; i < 255; i++) {
ip= ips +i;try{
addip=InetAddress.getByName(ip);
}catch(UnknownHostException e) {
System.out.println("找不到主机: " +ip);
}//获取登录过的设备
if (!ip.equals(addip.getHostName())) {try{//检查设备是否在线,其中1000ms指定的是超时时间
boolean status = InetAddress.getByName(addip.getHostName()).isReachable(1000); //当返回值是true时,说明host是可用的,false则不可。
System.out.println("IP地址为:" + ip + "\t\t设备名称为: " + addip.getHostName() + "\t\t是否可用: "
+ (status ? "可用" : "不可用"));
}catch(UnknownHostException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
}
});
}catch(Exception uhe) {
System.err.println("Unable to find: " +uhe.getLocalizedMessage());
}
}/*** 根据ip获取网段
*@paramip
*@return
*/
private staticString getNetworkSegment(String ip) {int startIndex = ip.lastIndexOf(".");return ip.substring(0, startIndex+1);
}
}