티스토리 뷰

☆ 클라이언트 맥 주소 확인 소스(javascript) ☆




오늘은 클라이언트 맥 주소를 구하는 소스에 대해서 설명하려고 합니다. 클라이언트 맥 주소에 대해서 설명하기보다는 제가 삽질한 내용들을 정리하는 내용이 될것 같습니다. 저의 삽질 경험으로 많은 분들은 빨리 결정하시길 바라겠습니다.


클라이언트 맥 주소를 확인하게 된 이유는 고객사의 요청으로 로그인 시 DB에 등록된 맥만 로그인을 허용하기 위해서 였습니다. 그러기 위해서는 로그인시 클라이언트의 맥주소를 확인하여 보내야 했습니다. 그래서 인터넷을 검색하게 되었습니다.


첫번째로 찾은 소스입니다.

이 소스를 보고 매우 간단하다고 생각하였습니다. 그래서 바로 로컬에서 테스트 해보았습니다. 아주 잘 되었습니다. 소스를 응용해서 로그인 시 사용해 보았습니다. 그런데 문제가 발생하였습니다. 해당 소스는 로컬IP 및 로컬맥 주소를 가져오는 소스였습니다. 서버에 올려서 실행해보니 서버의 IP와 서버의 맥주소가 나왔습니다. 맨붕이 오기시작했고.. 다른 소스를 찾기 시작했습니다.



두번째로 찾은 소스입니다.

다음으로 찾은 소스는 runtime.getruntime().exec 함수를 이용해서 ipconfig /all을 실행하여 결과를 가져와 파싱하는 소스였습니다. 이소스도 로컬에는 매우 잘 되었습니다. 서버에 올려 테스트 해보니 첫번째거와 마찬가지로 서버의 정보가 나왔습니다. 그래서 다시 찾기 시작하였습니다.




세번째로 찾은 소스입니다.

다음으로 찾은 소스는 두번째와 동일하게  runtime.getruntime().exec 함수를 사용하는 것이었습니다. 하지만 여기서 사용한 arp는 서버에 연결된 클라이언트 목록이 나오는 명령어였습니다. 클라이언트의 ip 와 맥정보가 있으니 request에 있는 IP를 가지고 찾으면 찾을 수 있겠다는 생각에 해보았습니다. 결과는 실패였습니다. 이유를 찾아보니. 클라이언트와 서버가 다이렉트로 연결된 경우에는 찾을 수 있지만, L4나 방화벽 솔루션을 사용한다면 서버에 들어오기전 또다른 서버를 통해 접속되기 때문의 서버 직전에 서버IP 및 맥정보만 확인이 가능하였습니다. 


여기까지 와서 서버에서는 할 수 없다는 결론을 내리고 클라이언트에서 해야 되겠다고 생각하고 검색을 해보았습니다. 검색결과 Applet 및 ActiveX를 활용하는 방법이였습니다. 해당 방법으로 시도를 해보기로 하였습니다. 하지만 요즘 ActiveX를 걷어내고 있는 상황에서 이 방법을 쓰자니 뭔가 당기지가 않았습니다. 그래서 Applet을 검색하였습니다. Applet은 자바와 코딩은 동일하나 해당 소스가 서버가 아닌 클라이언트에 있는 JVM에서 동작하기 때문에 로컬에 IP 및 맥주소를 가져오는데는 문제가 없었습니다. 하지만 또 하나의 문제가 생겼습니다. 바로 소스관리가 되지 않는 문제였습니다. 이것도 뭔가 쓰기에는 그다지 좋아보이지 않았습니다. 그래서 다시 검색을 시작하였습니다. ㅠㅠ


마지막으로 찾은 소스는 javascript에서 ActiveXObject를 사용하는 소스입니다.

해당 방법으로 로컬의 네트워크아답터 정보를 모두 확인할 수 있었습니다. 해당 방식도 ActiveX를 활용하는 방법과 유사하지만 관련 dll이 기본적으로 브라우자나 윈도우에 내장되어 있어 다운로드 없이 바로 사용가능하다는 점입니다. 단, 스크립트 실행에 있어서 ActiveX 허용창이 표시되게 됩니다.



ActiveX허용 관련해서는 해당 사이트를 신뢰할수 있는 사이트로 등록 후 옵션을 변경하였습니다.

그리하여 결국 클라이언트 맥 주소를 확인하였습니다. 이 방법도 별로다 생각하시는 분들은 ActiveX Cab파일 설치나 Applet를 확인해보시기 바랍니다. 키포인트는 클라이언트에 응용프로그램을 실행해야 클라이언트의 맥주소를 알 수 있다는 것이었습니다.


그럼 모두 즐거운 하루되시길 바라겠습니다. 관련소스는 아래에서 받으시면 됩니다.


NetworkGetMacAddress.java

NetworkGetMacAddress1.java

NetworkGetMacAddress2.java

NetworkGetMacAddress3.jsp





댓글