Java實現(xiàn)局域網IP地址掃描
更新時間:2022年05月19日 15:46:06 作者:深色風信子
這篇文章主要為大家詳細介紹了Java實現(xiàn)局域網IP地址掃描,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
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("\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() + "]"; ?? ?} ?? ? }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Spring Cloud詳解實現(xiàn)聲明式微服務調用OpenFeign方法
這篇文章主要介紹了Spring Cloud實現(xiàn)聲明式微服務調用OpenFeign方法,OpenFeign 是 Spring Cloud 家族的一個成員, 它最核心的作用是為 HTTP 形式的 Rest API 提供了非常簡潔高效的 RPC 調用方式,希望對大家有所幫助。一起跟隨小編過來看看吧2022-07-07解決mapper.xml中resultType映射類型的問題
這篇文章主要介紹了解決mapper.xml中resultType映射類型的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Java使用flyway實現(xiàn)腳本自動化的方法詳解
Flyway是一個開源的數(shù)據(jù)庫版本控制工具,主要用于管理數(shù)據(jù)庫的版本和變更,它可以自動化地將數(shù)據(jù)庫遷移到不同的版本,同時支持多種數(shù)據(jù)庫類型,本文給大家介紹了如何使用flyway實現(xiàn)腳本自動化,需要的朋友可以參考下2023-10-10