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