Java如何在命令行中獲取指定數(shù)據(jù)
1.執(zhí)行ipconfig /all獲取主機(jī)所有網(wǎng)卡信息
并分析這些字符串,提取出有效網(wǎng)卡(網(wǎng)卡名稱,mac地址,ipv4地址,掩碼,網(wǎng)關(guān),dns)
將網(wǎng)卡插入HashMap中,key是網(wǎng)卡的名稱,value是網(wǎng)卡對(duì)象(包含mac和4個(gè)邏輯地址)
請(qǐng)輸入網(wǎng)卡的名稱,程序通過(guò)map的get方法取出此名稱對(duì)應(yīng)的網(wǎng)卡對(duì)象
根據(jù)網(wǎng)卡對(duì)象執(zhí)行其方法getNetId()取出其網(wǎng)卡所在網(wǎng)絡(luò)號(hào)進(jìn)行打印
getBroadId()取出其廣播號(hào)進(jìn)行打印
2.根據(jù)網(wǎng)卡的ip和掩碼掃描所有這個(gè)子網(wǎng)中可能存在的鄰居
然后用ping ..方式進(jìn)行驗(yàn)證此鄰居是否存在,如果存在則將其加入
網(wǎng)卡的鄰居集合(HashSet)中
3.某些鄰居有可能開(kāi)啟防火墻導(dǎo)致ping失敗,所以驗(yàn)證其是否存在的
恰當(dāng)方式是先ping它一下,然后用arp -a查看這個(gè)鄰居是否有arp回應(yīng)
如果存在arp條目則說(shuō)明這個(gè)鄰居是存在的.
代碼實(shí)例
package day2020072501;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Zzbds {
public static String exeCmd(String commandStr) {
BufferedReader br = null;
try {
Process p = Runtime.getRuntime().exec(commandStr);
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
// System.out.println(sb.toString());
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return commandStr;
}
public static void main(String[] args) {
String str = exeCmd("ipconfig /all");
String expr = "(.+適配器 +.+)\\:"; // 找到所有網(wǎng)卡名字
HashMap<NetInfo, String> mp = new HashMap<>(); // HashMap存儲(chǔ)信息
Pattern pt = Pattern.compile(expr); // 配對(duì) P,和正則匹配
Matcher mt = pt.matcher(str); // 開(kāi)始匹配源字符串 matcher
System.out.println("\n==========================");
int MacIndex = 0;// 記錄網(wǎng)卡
while (mt.find()) {
MacIndex++;
System.out.println(mt.group(1));
}
System.out.println("\n共" + MacIndex + "個(gè)網(wǎng)卡");
if (MacIndex == 0) {
System.out.println("沒(méi)有網(wǎng)卡");
return;
}
System.out.println("\n==========================");
Matcher mt1 = pt.matcher(str); // 開(kāi)始匹配源字符串 matcher
// System.out.println("可用網(wǎng)卡");
int MacUse = 0;// 可以使用的網(wǎng)卡數(shù)量
String[] MacArr = new String[10];// 存儲(chǔ)網(wǎng)卡數(shù)組(可用網(wǎng)卡)
while (mt1.find()) { // 循環(huán)遍歷所有網(wǎng)卡
// 判斷是否可用
if (NetWorkUtil.NetWorkavailable(mt1.group())) {
MacArr[MacUse] = mt1.group();
MacUse++;
// System.out.println(mt1.group());
}
}
for (int i = 0; i < MacUse; i++) {
System.out.println(MacArr[i]);
}
System.out.println("\n可用網(wǎng)卡共:" + MacUse + "個(gè)");
System.out.println("\n==========================\n");
// System.out.println("------------------------------------");
// 打印出可用的網(wǎng)卡信息
for (int j = 0; j < MacUse; j++) { // 使用(數(shù)組)循環(huán),打印所有可用網(wǎng)卡的所有信息
String MacInfo = "";// 可用的網(wǎng)卡信息
String expr1 = "(" + MacArr[j] + "([\\d\\D]*))";
System.out.println("\n第" + (j + 1) + "個(gè)是:" + MacArr[j]);
Pattern pt1 = Pattern.compile(expr1);
Matcher mt2 = pt1.matcher(str);
if (mt2.find()) {
MacInfo = mt2.group(1);// 把查到的信息賦給變量MaxInfo
}
// System.out.println(MacInfo);
System.out.println("---------------------可用網(wǎng)卡的具體信息如下(第" + (j + 1) + "個(gè)網(wǎng)卡)----------------");
Pattern pt2 = Pattern.compile(" +描述(\\. +)+: (.*)");
Matcher mt3 = pt2.matcher(MacInfo);// 網(wǎng)卡名
Pattern pt3 = Pattern.compile(" +物理地址(\\. +)+: (.*)");
Matcher mt4 = pt3.matcher(MacInfo);// 網(wǎng)卡地址
Pattern pt5 = Pattern.compile(" +IPv4 地址( +\\.)+ +: +(.*)\\(");
Matcher mt5 = pt5.matcher(MacInfo);// IP地址
Pattern pt6 = Pattern.compile(" +子網(wǎng)掩碼( +\\.)+ +: +(.*)");
Matcher mt6 = pt6.matcher(MacInfo);// 子網(wǎng)掩碼
Pattern pt7 = Pattern.compile(" +默認(rèn)網(wǎng)關(guān)(\\. +)+: (.*)");
Matcher mt7 = pt7.matcher(MacInfo);// 網(wǎng)關(guān)
Pattern pt8 = Pattern.compile(" +DNS 服務(wù)器( +\\.)+ +: +(.*)");
Matcher mt8 = pt8.matcher(MacInfo);// DNS
String MacName = "";
String MacIP = "";
String IPV4 = "";
String NetMask = "";
String GateWay = "";
String DNS = "";
if (mt3.find() && mt4.find() && mt5.find() && mt6.find() && mt7.find() && mt8.find()) {
MacName = mt3.group(2);
MacIP = mt4.group(2);
IPV4 = mt5.group(2);
NetMask = mt6.group(2);
GateWay = mt7.group(2);
DNS = mt8.group(2);
mp.put(new NetInfo(MacName,MacIP, IPV4, NetMask, GateWay, DNS), MacName);
}
System.out.println("網(wǎng)卡名稱:" + MacName.trim());
System.out.println("網(wǎng)卡地址:" + MacIP.trim());
System.out.println("IPV4地址:" + IPV4.trim());
System.out.println("子網(wǎng)掩碼:" + NetMask.trim());
System.out.println("默認(rèn)網(wǎng)關(guān):" + GateWay.trim());
System.out.println("DNS地址:" + DNS.trim());
}
System.out.println("\n=====================使用HashMap遍歷輸出===========================");
for (NetInfo h : mp.keySet()) {
System.out.println("\n網(wǎng)卡名字:" + mp.get(h) + "\n" + h);
System.out.println("\n-------------");
}
System.out.println("======================");
System.out.println("請(qǐng)輸入網(wǎng)卡名:");
//String inputMacName = new Scanner(System.in).next();//輸入網(wǎng)卡名稱
//默認(rèn)輸入:VMware Virtual Ethernet Adapter for VMnet8
String NetId = "";//記錄IP
String inputMacName ="VMware Virtual Ethernet Adapter for VMnet8";
System.out.println("您輸入的是:"+inputMacName);
for (NetInfo h : mp.keySet()) {
if((h.getMacName().trim()).equals(inputMacName)){
System.out.println("\n網(wǎng)卡名字:" + mp.get(h) + "\n" + h);
NetId = h.getIPV4();
System.out.println("\nIP:"+NetId); //打印出此IP(后面求出網(wǎng)絡(luò)號(hào)、廣播號(hào))
}
}
//分解數(shù)組
String []netIPArr = NetId.split("\\.");
for(int i= 0;i<netIPArr.length;i++){
System.out.println(netIPArr[i]);
}
//求網(wǎng)絡(luò)號(hào):
System.out.println("網(wǎng)絡(luò)號(hào):"+netIPArr[0]+"."+netIPArr[1]+"."+netIPArr[2]+"."+0);
System.out.println("廣播號(hào):"+netIPArr[0]+"."+netIPArr[1]+"."+netIPArr[2]+"."+255);
//訪問(wèn)所有鄰居
HashSet<String> nei = new HashSet<>();//存儲(chǔ)所有可達(dá)的鄰居
for(int i= 1;i<5;i++){
String str1 = exeCmd("ping "+netIPArr[0]+"."+netIPArr[1]+"."+netIPArr[2]+"."+i);
System.out.println(str1);
//判斷是否Ping 通
Pattern pt9 = Pattern.compile("TTL");
Matcher mt9 = pt9.matcher(str1);
if (mt9.find()){//如果能ping 通,直接加入到set集合內(nèi)
//System.out.println(netIPArr[0]+"."+netIPArr[1]+"."+netIPArr[2]+"."+i);
nei.add(netIPArr[0]+"."+netIPArr[1]+"."+netIPArr[2]+"."+i);//存儲(chǔ)
}else{//如果ping 不同,使用arp 查看回應(yīng)
String str2 = exeCmd("arp -a");
Pattern pt10 = Pattern.compile(netIPArr[0]+"."+netIPArr[1]+"."+netIPArr[2]+"."+i);
Matcher mt10 = pt10.matcher(str2);
if (mt10.find()){//如果arp 返回?cái)?shù)據(jù),也加入到set集合內(nèi)
nei.add(netIPArr[0]+"."+netIPArr[1]+"."+netIPArr[2]+"."+i);//存儲(chǔ)
}
}
}
//輸出所有可達(dá)的鄰居
System.out.println("所有可達(dá)的鄰居:");
for(String s : nei){
System.out.println(s);
}
}
}


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)n位數(shù)字的全排列
今天小編就為大家分享一篇關(guān)于Java實(shí)現(xiàn)n位數(shù)字的全排列,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
Java實(shí)現(xiàn)商城訂單超時(shí)取消功能
大多數(shù)的B2C商城項(xiàng)目都會(huì)有限時(shí)活動(dòng),當(dāng)用戶下單后都會(huì)有支付超時(shí)時(shí)間,當(dāng)訂單超時(shí)后訂單的狀態(tài)就會(huì)自動(dòng)變成已取消 ,這個(gè)功能的實(shí)現(xiàn)有很多種方法,本文的實(shí)現(xiàn)方法適合大多數(shù)比較小的商城使用。具體實(shí)現(xiàn)方式可以跟隨小編一起看看吧2019-12-12
Mybatis游標(biāo)查詢大量數(shù)據(jù)方式
這篇文章主要介紹了Mybatis游標(biāo)查詢大量數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
@Transactional遇到try catch失效的問(wèn)題
這篇文章主要介紹了@Transactional遇到try catch失效的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
java基于AES對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能示例
這篇文章主要介紹了java基于AES對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能,結(jié)合完整實(shí)例形式分析了AES對(duì)稱加密算法的定義與使用技巧,需要的朋友可以參考下2017-01-01

