네트워크 인터페이스 로 서버 MAC 주소 가 져 오기

  NetworkInterface     MAC  

   많은 경우 에 우 리 는 서버 하드웨어 정보(예 를 들 어 MAC 주소)를 얻어 야 한다.자주 사용 하 는 몇 가지 방식 이 있다.
  •  명령 행 프로그램 을 사용 하여 하 드 디스크 정 보 를 얻 은 다음 Runtime.getRuntime().exec 를 통 해 출력 흐름 을 얻 은 다음 문자열 분석 을 통 해 MAC 주 소 를 얻 을 수 있 습 니 다
  • 로 컬 프로그램 을 컴 파일 한 다음 JNI 를 통 해 호출 합 니 다   상기 두 가지 방식 은 모두 서로 다른 운영 체제 플랫폼 을 구분 하고 인 코딩 을 해 야 한다.예 를 들 어
  •  windows 플랫폼 은 iptables/all 명령 을 사용 해 야 합 니 다
  • Liux 플랫폼 은 ifconfig 명령 을 사용 해 야 합 니 다
  •       오늘 은 통용 되 는 크로스 플랫폼 의 조작 방식 을 소개 합 니 다.바로 JDK 가 자체 적 으로 가지 고 있 는 NetworkInterface 인터페이스 입 니 다.이 인 터 페 이 스 는 JDK 1.4 에 이미 나 타 났 지만 기능 이 비교적 적 습 니 다.JDK 1.6 이후 에 새로운 기능 이 많이 추 가 돼 서 좋 습 니 다.
          구체 적 인 기능 은 API 문 서 를 참고 할 수 있 습 니 다.여기 서 서버 MAC 주 소 를 어떻게 얻 는 지 소개 합 니 다.코드 는 다음 과 같 고 설명 이 있 으 며 더 이상 설명 하지 않 습 니 다.
    //모든 네트워크 카드 의 MAC 주 소 를 가 져 옵 니 다 public static ListgetAllMac(){Listlist=new Array List();try { Enumeration e = NetworkInterface.getNetworkInterfaces();// 모든 네트워크 인터페이스의 매개 인 스 턴 스 while(e.hasMoreElements(){NetworkInterface network=e.nextElement();/현재 네트워크 인터페이스 if 가 져 오기(network!=null) { if (network.getHardwareAddress() != null){//MAC 주소 획득//결 과 는 하나의 byte 배열 입 니 다.각 항목 은 하나의 byte 입 니 다.우 리 는 parseByte 방법 을 통 해 흔히 볼 수 있 는 16 진법 으로 byte[]addres=network.getHardware Address()를 표시 해 야 합 니 다.StringBuffer sb = new StringBuffer(); if (addres != null && addres.length > 1) { sb.append(parseByte(addres[0])).append(":").append( parseByte(addres[1])).append(":").append( parseByte(addres[2])).append(":").append( parseByte(addres[3])).append(":").append( parseByte(addres[4])).append(":").append( parseByte(addres[5])); list.add(sb.toString()); } } } else{System.out.println("MAC 주소 가 져 오기 이상");}}}}catch (SocketException e) { e.printStackTrace(); } return list; } //바 이 너 리 개인 static String parseByte(byte b){int int Value=0 을 포맷 합 니 다.if (b >= 0) { intValue = b; } else { intValue = 256 + b; } return Integer.toHexString(intValue); } 
    그런 후에 우 리 는 다음 과 같은 테스트 코드 로 테스트 결 과 를 보 았 다.
    List list = getAllMac(); for (String mac : list) { System.out.println(mac); } 
    출력 결 과 는 다음 과 같 습 니 다.
    0:18:8b:cc:xx:e3 0:0:0:0:0:0:0:e0 0:50:xx:c0:0:1 0:50:xx:c0:0:8 
    여러분 은"0:18:8b:cc:xx:e3"를 발 견 했 습 니 다.0 만 있 습 니 다.매우 어색 해 보 입 니 다.우 리 는 parseByte 방법 을 수정 해 보 겠 습 니 다.다음 과 같 습 니 다.
    private static String parseByte(byte b) { String s = "00"+Integer.toHexString(byte0); return s.substring(s.length() - 2); } 
    출력 결과 가 바 뀌 었 습 니 다:
    00:18:8b:cc:xx:e3 00:00:00:00:00:e0 00:50:xx:c0:00:01 00:50:xx:c0:00:08 
    이렇게 하면 훨씬 편안 해 보이 나 요?그 렇 죠?
    또한 네트워크 인터페이스 인 터 페 이 스 는 다음 과 같은 방법 을 제공 하 였 으 니 참고 하 시기 바 랍 니 다.
  • String display Name()네트워크 인터페이스의 디 스 플레이 이름 가 져 오기
  • int getMTU()는 이 인터페이스의 최대 전송 장치(Maximum Transmission Unit,MTU)를 되 돌려 줍 니 다
  • String getName()이 네트워크 인터페이스의 이름 을 가 져 옵 니 다
  • boolean isLoopback()이 네트워크 인터페이스 가 전송 인터페이스 인지 되 돌려 줍 니 다
  • boolean isPointToPoint()이 네트워크 인터페이스 가 점대 점 인터페이스 인지 되 돌려 줍 니 다
  • boolean isUp()이 네트워크 인터페이스 가 열 렸 고 실행 되 었 는 지 되 돌려 줍 니 다
  • boolean isVirtual()이 인터페이스 가 가상 인터페이스 인지 되 돌려 줍 니 다
  • 좋은 웹페이지 즐겨찾기