ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java로 cmd명령어, ipconfig -all, mac 가져오기
    WEB/BACK 2021. 6. 17. 15:56
    반응형

    안녕하세요 cmd에서 여러가지 명령어를 사용합니다. java에서도 같은 결과를 가져오고 싶을때가 있습니다. 가령 mac주소라던지 ip주소라던지 네트워크정보등등... 오늘은 cmd에서 ipconfig -all 의 결과를 자바를 이용해서 가져오도록 하겠습니다.

    cmd

     

    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 어댑터.....

    원하는결과로 잘 나왔습니다.!

     

    그럼이만 ...다음포스팅에서 봐요!

     

     

     

     

     

     

    반응형

    댓글

Designed by Tistory.