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과 동일한 클래스를 실행할 때 원하는 출력을 얻습니다. 애플릿 항아리가 서버에 배치되고 애플릿이 클라이언트 시스템에로드 될 때 문제가 발생합니다.
어떤 목적으로? MAC 주소를 표시하는 것을 제외하고 Java의 MAC 주소로 할 수있는 유용한 방법은 없습니다. 사용자가이를 변경할 수 있다는 것을 알고 있습니까? 따라서 고유 한 시스템 식별자로 유용하지는 않습니까? – EJP
예 스푸핑이 가능하다는 것을 알고 있습니다. 그러나 클라이언트는 (클라이언트 MAC 주소를 가져 오는) 원할 것이고 주소가 변경 되더라도 상관 없습니다. 우리는 그 주소를 가져 와서 우리 레코드에 이미있는 주소와 비교하고 사용자가 그 컴퓨터에서 응용 프로그램을 더 사용할 수 있도록 권한을 부여하기 만하면됩니다. – Toral