Java实现局域网IP地址扫描

 更新时间:2022年05月19日 15:46:06   作者:深色風信子  
这篇文章主要为大家详细介绍了Java实现局域网IP地址扫描,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Java扫描局域网地址主要通过CMD命令,主要通过Runtime和Process类,由于同一局域网下的IP地址比较多需要通过Java的多线程来扫描端口。

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PingTask{
    
    private String   address;
    
    public PingTask(String address){
        this.address=address;
    }
    
    public PingResult run() {
        Runtime runtime;
        Process process;
        try {
            runtime=Runtime.getRuntime();
            process=runtime.exec("ping "+address);
            BufferedInputStream inputStream=(BufferedInputStream) process.getInputStream();
            byte [] bt =new byte[1024];
            StringBuffer buffer=new StringBuffer();
            int len=0;
            while((len=inputStream.read(bt, 0,bt.length))!=-1){
                buffer.append(new String(bt, 0, len, "GBK"));
            }
            String regex="(\\d*)?";
            String result="";
            Pattern pattern=Pattern.compile(regex);
            Matcher matcher=pattern.matcher(buffer.toString());
            while(matcher.find()){
                if(!matcher.group().equals("")){
                    result=matcher.group();
                }
            }
            
            InetAddress inetAddress=InetAddress.getByName(address);
            String hostname="";
            if(!inetAddress.getHostName().equals(address)){
                hostname=inetAddress.getHostName();
            }
            String mac="";
            process=runtime.exec("arp -a "+address);
            
            BufferedInputStream macinputStream=(BufferedInputStream) process.getInputStream();
            byte [] macbt =new byte[1024];
            StringBuffer macbuffer=new StringBuffer();
            while((len=macinputStream.read(macbt, 0,macbt.length))!=-1){
                macbuffer.append(new String(macbt, 0, len, "GBK"));
            }
            String[] macresult=macbuffer.toString().trim().split("\r\n");
            
            if(!macbuffer.toString().contains("未找到 ARP")){
                mac=macresult[2].substring(20, 40).trim();
            }
            
            PingResult pingResult=new PingResult(address,(100-Integer.parseInt(result))+"%",mac,hostname);
            
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return pingResult;
    }
    
}

调用方法:

public static void main(String[] args) {
        PingResult result=new PingTask("123.123.123.123");
        System.out.println(result.toString());
    }

PingResult 类

package com.xu.ip;

public class PingResult {
    
    private static String address;//IP地址
    private static String result;//是否可以连接
    private static String physicialaddress;//物理地址
    private static String hostname;//主机名
    
    public String getPhysicialaddress() {
        return physicialaddress;
    }

    public void setPhysicialaddress(String physicialaddress) {
        PingResult.physicialaddress = physicialaddress;
    }

    public String getHostname() {
        return hostname;
    }

    public void setHostname(String hostname) {
        PingResult.hostname = hostname;
    }

    public PingResult(String address, String result) {
        PingResult.address = address;
        PingResult.result = result;
    }

    public PingResult() {
        
    }
    
    public PingResult(String address, String result, String physicialaddress, String hostname) {
        PingResult.address = address;
        PingResult.result = result;
        PingResult.physicialaddress = physicialaddress;
        PingResult.hostname = hostname;
    }

    public String getAddress() {
        return address;
    }
    
    public void setAddress(String address) {
        PingResult.address = address;
    }
    
    public String getResult() {
        return result;
    }
    
    public void setResult(String result) {
        PingResult.result = result;
    }

    @Override
    public String toString() {
        return "PingResult [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()="
                + super.toString() + "]";
    }
    
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • IDEA如何实现右键翻译

    IDEA如何实现右键翻译

    这篇文章主要介绍了IDEA如何实现右键翻译问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • JAVA-NIO之Socket/ServerSocket Channel(详解)

    JAVA-NIO之Socket/ServerSocket Channel(详解)

    下面小编就为大家带来一篇JAVA-NIO之Socket/ServerSocket Channel(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 理解JDK动态代理为什么必须要基于接口

    理解JDK动态代理为什么必须要基于接口

    这篇文章主要介绍了理解JDK动态代理为什么必须要基于接口,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Spring 框架中注入或替换方法实现

    Spring 框架中注入或替换方法实现

    这篇文章主要介绍了Spring 框架中注入或替换方法实现,非常不错,具有参考借鉴价值,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • spring aop实现用户权限管理的示例

    spring aop实现用户权限管理的示例

    本篇文章主要介绍了spring aop实现用户权限管理的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Springboot通过ObjectMapper配置json序列化详解

    Springboot通过ObjectMapper配置json序列化详解

    SpringBoot默认集成Jackson库,其中ObjectMapper类是核心,用于Java对象与JSON字符串的互转,提供配置序列化特性、注册模块等方法,在SpringBoot中可以全局配置JSON格式,如日期格式化、将Long转为字符串,还可以配置序列化时的各种规则,感兴趣的可以了解一下
    2024-10-10
  • Java8之Stream流代替For循环操作

    Java8之Stream流代替For循环操作

    这篇文章主要介绍了Java8之Stream流代替For循环操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Spring的@CrossOrigin注解处理请求源码解析

    Spring的@CrossOrigin注解处理请求源码解析

    这篇文章主要介绍了Spring的@CrossOrigin注解处理请求源码解析,@CrossOrigin源码解析主要分为两个阶段@CrossOrigin注释的方法扫描注册,请求匹配@CrossOrigin注释的方法,本文从源码角度进行解析,需要的朋友可以参考下
    2023-12-12
  • Java Bean转Map的那些踩坑实战

    Java Bean转Map的那些踩坑实战

    项目中有时会遇到Map转Bean,Bean转Map的情况,下面这篇文章主要给大家介绍了关于Java Bean转Map那些踩坑的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Java实现黄金分割法的示例代码

    Java实现黄金分割法的示例代码

    黄金分割法是一种区间收缩方法。所谓区间收缩方法,指的是将含有最优解的区间逐步缩小,直至区间长度为零的方法。本文将用Java实现这一算法,需要的可以参考一下
    2022-03-03

最新评论