Java局域网IP地址扫描
深色風信子 人气:2Java扫描局域网地址主要通过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() + "]"; } }
加载全部内容