电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java如何在命令行中獲取指定數據

瀏覽:12日期:2022-08-27 18:00:09

1.執行ipconfig /all獲取主機所有網卡信息

并分析這些字符串,提取出有效網卡(網卡名稱,mac地址,ipv4地址,掩碼,網關,dns)

將網卡插入HashMap中,key是網卡的名稱,value是網卡對象(包含mac和4個邏輯地址)

請輸入網卡的名稱,程序通過map的get方法取出此名稱對應的網卡對象

根據網卡對象執行其方法getNetId()取出其網卡所在網絡號進行打印

getBroadId()取出其廣播號進行打印

2.根據網卡的ip和掩碼掃描所有這個子網中可能存在的鄰居

然后用ping ..方式進行驗證此鄰居是否存在,如果存在則將其加入

網卡的鄰居集合(HashSet)中

3.某些鄰居有可能開啟防火墻導致ping失敗,所以驗證其是否存在的

恰當方式是先ping它一下,然后用arp -a查看這個鄰居是否有arp回應

如果存在arp條目則說明這個鄰居是存在的.

代碼實例

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 = '(.+適配器 +.+):'; // 找到所有網卡名字 HashMap<NetInfo, String> mp = new HashMap<>(); // HashMap存儲信息 Pattern pt = Pattern.compile(expr); // 配對 P,和正則匹配 Matcher mt = pt.matcher(str); // 開始匹配源字符串 matcher System.out.println('n=========================='); int MacIndex = 0;// 記錄網卡 while (mt.find()) { MacIndex++; System.out.println(mt.group(1)); } System.out.println('n共' + MacIndex + '個網卡'); if (MacIndex == 0) { System.out.println('沒有網卡'); return; } System.out.println('n=========================='); Matcher mt1 = pt.matcher(str); // 開始匹配源字符串 matcher // System.out.println('可用網卡'); int MacUse = 0;// 可以使用的網卡數量 String[] MacArr = new String[10];// 存儲網卡數組(可用網卡) while (mt1.find()) { // 循環遍歷所有網卡 // 判斷是否可用 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可用網卡共:' + MacUse + '個'); System.out.println('n==========================n'); // System.out.println('------------------------------------'); // 打印出可用的網卡信息 for (int j = 0; j < MacUse; j++) { // 使用(數組)循環,打印所有可用網卡的所有信息 String MacInfo = '';// 可用的網卡信息 String expr1 = '(' + MacArr[j] + '([dD]*))'; System.out.println('n第' + (j + 1) + '個是:' + 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('---------------------可用網卡的具體信息如下(第' + (j + 1) + '個網卡)----------------'); Pattern pt2 = Pattern.compile(' +描述(. +)+: (.*)'); Matcher mt3 = pt2.matcher(MacInfo);// 網卡名 Pattern pt3 = Pattern.compile(' +物理地址(. +)+: (.*)'); Matcher mt4 = pt3.matcher(MacInfo);// 網卡地址 Pattern pt5 = Pattern.compile(' +IPv4 地址( +.)+ +: +(.*)('); Matcher mt5 = pt5.matcher(MacInfo);// IP地址 Pattern pt6 = Pattern.compile(' +子網掩碼( +.)+ +: +(.*)'); Matcher mt6 = pt6.matcher(MacInfo);// 子網掩碼 Pattern pt7 = Pattern.compile(' +默認網關(. +)+: (.*)'); Matcher mt7 = pt7.matcher(MacInfo);// 網關 Pattern pt8 = Pattern.compile(' +DNS 服務器( +.)+ +: +(.*)'); 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('網卡名稱:' + MacName.trim()); System.out.println('網卡地址:' + MacIP.trim()); System.out.println('IPV4地址:' + IPV4.trim()); System.out.println('子網掩碼:' + NetMask.trim()); System.out.println('默認網關:' + GateWay.trim()); System.out.println('DNS地址:' + DNS.trim()); } System.out.println('n=====================使用HashMap遍歷輸出==========================='); for (NetInfo h : mp.keySet()) { System.out.println('n網卡名字:' + mp.get(h) + 'n' + h); System.out.println('n-------------'); } System.out.println('======================'); System.out.println('請輸入網卡名:'); //String inputMacName = new Scanner(System.in).next();//輸入網卡名稱 //默認輸入: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網卡名字:' + mp.get(h) + 'n' + h);NetId = h.getIPV4();System.out.println('nIP:'+NetId); //打印出此IP(后面求出網絡號、廣播號) } } //分解數組 String []netIPArr = NetId.split('.'); for(int i= 0;i<netIPArr.length;i++){ System.out.println(netIPArr[i]); } //求網絡號: System.out.println('網絡號:'+netIPArr[0]+'.'+netIPArr[1]+'.'+netIPArr[2]+'.'+0); System.out.println('廣播號:'+netIPArr[0]+'.'+netIPArr[1]+'.'+netIPArr[2]+'.'+255); //訪問所有鄰居 HashSet<String> nei = new HashSet<>();//存儲所有可達的鄰居 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集合內//System.out.println(netIPArr[0]+'.'+netIPArr[1]+'.'+netIPArr[2]+'.'+i);nei.add(netIPArr[0]+'.'+netIPArr[1]+'.'+netIPArr[2]+'.'+i);//存儲 }else{//如果ping 不同,使用arp 查看回應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 返回數據,也加入到set集合內 nei.add(netIPArr[0]+'.'+netIPArr[1]+'.'+netIPArr[2]+'.'+i);//存儲} } } //輸出所有可達的鄰居 System.out.println('所有可達的鄰居:'); for(String s : nei){ System.out.println(s); } }}

Java如何在命令行中獲取指定數據

Java如何在命令行中獲取指定數據

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | EPDM密封胶条-EPDM密封垫片-EPDM生产厂家| 光照全温振荡器(智能型)-恒隆仪器| 减速机_上海宜嘉减速机| 宁夏活性炭_防护活性炭_催化剂载体炭-宁夏恒辉活性炭有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 广域铭岛Geega(际嘉)工业互联网平台-以数字科技引领行业跃迁 | 杭州火蝠电商_京东代运营_拼多多全托管代运营【天猫代运营】 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 北钻固控设备|石油钻采设备-石油固控设备厂家 | 10吨无线拉力计-2吨拉力计价格-上海佳宜电子科技有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | arch电源_SINPRO_开关电源_模块电源_医疗电源-东佑源 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 同学聚会纪念册制作_毕业相册制作-成都顺时针宣传画册设计公司 | 浙江富广阀门有限公司| 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | CPSE安博会| 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 馋嘴餐饮网_餐饮加盟店火爆好项目_餐饮连锁品牌加盟指南创业平台 | 协议书_协议合同格式模板范本大全| LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 |