首頁 > 軟體

Java實現區域網IP地址掃描

2022-05-19 19:02:11

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("rn");
            
            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() + "]";
    }
    
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com