服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java实现局域网IP地址扫描

Java实现局域网IP地址扫描

2022-12-19 20:55深色風信子 Java教程

这篇文章主要为大家详细介绍了Java实现局域网IP地址扫描,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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;
    }
    
}

调用方法:

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

PingResult 类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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() + "]";
    }
    
}

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

原文链接:https://blog.csdn.net/qq_34814092/article/details/83306097

延伸 · 阅读

精彩推荐