-
java로 cmd명령어, ipconfig -all, mac 가져오기WEB/BACK 2021. 6. 17. 15:56반응형
안녕하세요 cmd에서 여러가지 명령어를 사용합니다. java에서도 같은 결과를 가져오고 싶을때가 있습니다. 가령 mac주소라던지 ip주소라던지 네트워크정보등등... 오늘은 cmd에서 ipconfig -all 의 결과를 자바를 이용해서 가져오도록 하겠습니다.
1. java에서 ipconfig -all 의 결과보기
String command = "ipconfig -all";//원하는 명령어 try { //시스템 Command 호출 Process ifconfigProc = Runtime.getRuntime().exec(command); // Return 되는 Console 라인을 읽음 BufferedReader ifconfigProcReader = new BufferedReader(new InputStreamReader(ifconfigProc.getInputStream(),"MS949")); String readLine; String allText = null; ArrayList<String> koIpName = new ArrayList<String>(); ArrayList<String> macAddress = new ArrayList<String>(); while ((readLine = ifconfigProcReader.readLine()) != null) { System.out.println(readLine);//원하는 결과값 } }catch (Exception e){ }
while문안에있는 readLine을 출력해보면 우리가 cmd창에서 본 결과값과 동일한 결과가 나오는 것을 알 수 있습니다.
유의점은 한글로 출력하기때문에 BufferedReader에서 MS949를 설정해주는것입니다.
그럼이제 이 결과값에서 원하는 값만 선택해와보겠습니다. 저는 네트워크 이름 (이더넷 어댑터 이더넷, 무선 LAN 어댑터 로컬 영역 연결* 1: 등등)과 물리적 주소(맥주소)를 매칭해서 가져와보고싶습니다.
2.맥주소 가져오기
정규식을 이용해서 가져와보겠습니다. 우선 한글로 ip이름 가져오기
String REGEX = "(.*[A-Z])*:($)"; // 한글 이름 가져오기
맥 주소 가져오기
String REGEX_MAC = "물리적";
맥주소랑 네트워크 이름 저장할 HashMap생성
HashMap<String,String> NameAndMac = new HashMap<>();
전체코드
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TEST { public static void main(String[] args) { String command = "ipconfig -all"; HashMap<String,String> NameAndMac = new HashMap<>(); try { Process ifconfigProc = Runtime.getRuntime().exec(command); BufferedReader ifconfigProcReader = new BufferedReader(new InputStreamReader(ifconfigProc.getInputStream(),"MS949")); String readLine; String allText = null; ArrayList<String> koIpName = new ArrayList<String>(); ArrayList<String> macAddress = new ArrayList<String>(); while ((readLine = ifconfigProcReader.readLine()) != null) { allText = allText + readLine + "!"; } String REGEX = "(.*[A-Z])*:($)"; String REGEX_MAC = "물리적"; String[] change_target = allText.split("!"); //String[] allText_arr = allText.split("\\n"); //이름 가져오기 for(String s : change_target){ Pattern pattern = Pattern.compile(REGEX); Matcher match = pattern.matcher(s); if(match.find()){ koIpName.add(s.replace(":","")); } } //맥 주소 가져오기 for(String s : change_target){ Pattern pattern = Pattern.compile(REGEX_MAC); Matcher match = pattern.matcher(s); if(match.find()){ String mac_temp = s.replace("물리적 주소 . . . . . . . . :", "").trim(); String mac_format = mac_temp.replaceAll("-",":"); macAddress.add(mac_format); } } for(int i=0; i<koIpName.size();i++) { NameAndMac.put(macAddress.get(i), koIpName.get(i)); } }catch (Exception e){ } System.out.println(NameAndMac);//결과 } }
결과는
{E6:FC:77:79:***=무선 LAN 어댑터 로컬 영역 연결* 10, C4:65:16:27:9C:**=이더넷 어댑터 이더넷, A6:FC:77:79:B6:**=무선 LAN 어댑터.....
원하는결과로 잘 나왔습니다.!
그럼이만 ...다음포스팅에서 봐요!
반응형'WEB > BACK' 카테고리의 다른 글
[JAVA]jsp에서 controller로 값 보내기 (ajax, jquery,serialize(), CRUD) (0) 2021.06.23 [sql] SELECT INET_NTOA, SELECT INET_ATON('127.0.0.1'); (0) 2021.06.17 [JAVA] SELECT 로 가져온 데이타를 .json 파일로 변환하기 및 에러처리 (0) 2021.06.03 [JAVA] 자바 폴더 삭제 (하위폴더+하위파일 모두 한번에 지우기), FileUtils.cleanDirectory,어제 날짜 폴더 삭제 (2) 2021.05.31 [sql] sql문 정리, mybatis에서 sql문 정리, left join 예,date format,마지막 로그인시간 (0) 2021.05.13