2013-06-18 3 views
0

Java 애플릿을 사용하여 클라이언트 MAC ID를 가져 오려고합니다. 애플릿은 html 페이지를 통해로드됩니다. 동일한 코드는 아래와 같이 주어진다 :이애플릿을 사용하여 클라이언트 MAC ID를 가져 오는 중 문제가 발생했습니다.

public class mainRun extends Applet{ 
private static final long serialVersionUID = -4939998186435587428L; 
String macAddr=""; 
public void paint(Graphics g) 
{ 
    try 
    { 
     System.out.println("Start"); 
     InetAddress ip = InetAddress.getLocalHost(); 
     System.out.println((new StringBuilder("Current IP address : "+ip.toString()))); 
     NetworkInterface network = NetworkInterface.getByInetAddress(ip); 
     byte mac[] = network.getHardwareAddress(); 
     System.out.println("mac : "+mac.toString()); 
     System.out.print("Current MAC address : "); 
     StringBuilder sb = new StringBuilder(); 
     for(int i = 0; i < mac.length; i++) 
      sb.append(String.format("%02X%s", new Object[] { 
        Byte.valueOf(mac[i]), i >= mac.length - 1 ? "" : "-" 
      })); 

     System.out.println(sb.toString()); 
     macAddr=String.valueOf(sb); 

    } 
    catch(SocketException e) 
    { 
     macAddr=e.toString(); 
     e.printStackTrace(); 
    } 
    catch (Exception e) { 
     macAddr=e.toString(); 
     e.printStackTrace(); 
    } 
    g.drawString("HELLO: "+macAddr, 100, 100); 
} 

}

그러나 getHardwareAddress() 메소드를 이용하여 우리가 널 포인터 예외지고있다.

이 문제의 원인은 무엇입니까?

또한 로컬 시스템에서 Java Applet과 동일한 클래스를 실행할 때 원하는 출력을 얻습니다. 애플릿 항아리가 서버에 배치되고 애플릿이 클라이언트 시스템에로드 될 때 문제가 발생합니다.

+0

어떤 목적으로? MAC 주소를 표시하는 것을 제외하고 Java의 MAC 주소로 할 수있는 유용한 방법은 없습니다. 사용자가이를 변경할 수 있다는 것을 알고 있습니까? 따라서 고유 한 시스템 식별자로 유용하지는 않습니까? – EJP

+0

예 스푸핑이 가능하다는 것을 알고 있습니다. 그러나 클라이언트는 (클라이언트 MAC 주소를 가져 오는) 원할 것이고 주소가 변경 되더라도 상관 없습니다. 우리는 그 주소를 가져 와서 우리 레코드에 이미있는 주소와 비교하고 사용자가 그 컴퓨터에서 응용 프로그램을 더 사용할 수 있도록 권한을 부여하기 만하면됩니다. – Toral

답변

0

getHardwareAddress에는 NetPermission ("getNetworkInformation")이 필요합니다.

따라서 애플릿 jar에 서명해야합니다.

관련 문제