Java实现局域网IP地址扫描
短信预约 -IT技能 免费直播动态提醒
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() + "]";
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341