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