반응형
제목이 무척기네요;;
머 내용은 이렇습니다.
내 폰이 연결된 wifi(보통 인터넷 공유기)에서 같은망을 사용하는 장비들(PC나 다른 폰 또는 장비)의
MAC을 가져와야 할 일이 생깁니다.
그럴때 쓰는게 아래와 같은 소스입니다.
인터넷에 찾다보면 많이나옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public static String getMacFromArpCache(String ip) { BufferedReader br = null; try { br = new BufferedReader(new FileReader("/proc/net/arp")); String line; while ((line = br.readLine()) != null) { String[] splitted = line.split(" +"); if (splitted != null && splitted.length >= 4 && ip.equals(splitted[0])) { // Basic sanity check String mac = splitted[3]; if (mac.matches("..:..:..:..:..:..")) { return mac; } else { return null; } } } } catch (Exception e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } | cs |
5번라인을 보면 "/proc/net/arp" 라는 파일을 읽어오는데, 아마 폰이 어디 연결되고 하면 정보가 저기에
업데이트 되는 것 같습니다.
참고로 PC에서는 커맨드창에서 "arp -a"라고 치면 연결된 내부망의 모든 장비들의 mac을 볼 수 있습니다.
일단 "proc/net/arp"를 읽어오면 아래와 같이 뜹니다.
IP address HW type Flags HW address Mask Device
192.168.0.1 0x1 0x2 01:11:21:31:41:51 * tiwlan0
헌데 위와 같이 하나밖에 없을경우가 있습니다.
2번부터는 뜨질않아요 ㅠㅠ
이럴경우 한참을 헤멨는데, 폰에서 ping을 한번씩 다 날려줘야 합니다.
핑은 아래와 같은 클래스로 날릴 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class pingthread extends Thread{ @Override public void run() { String endIp="192.168.0."; InetAddress ia; super.run(); for(int i=0;i<255;i++){ String Ip=endIp+(i+1); try { ia = InetAddress.getByName(Ip); if(ia.isReachable(10)==true) { Log.d("ipscan", endIp); }if(i==254){ Log.d("ipscan", "finish"); } } catch (UnknownHostException e){ Log.d("UnknownHost Exception",String.valueOf(e)); } catch (IOException e) { Log.d("IO Exception" ,String.valueOf(e)); } catch (IllegalArgumentException e) { Log.d("IllegalArgumentExceptio",String.valueOf(e)); } } } } | cs |
이렇게 핑을 한번 때려주고나서 mac을 검색하면 갱신이 됩니다.
그리고 검색된 mac만 가져오고 싶은경우 핑에서 잡힐때만 mac검사를 하면 되겠죠?ㅎ
그리고 특정 mac만 가져오고 싶은경우 처음 함수14라인에서 "if (mac.matches("..:..:..:..:..:.."))"
저 괄호안의 스트링부분을 원하는 맥으로 바꿔주면 됩니다.
예를들어 "if(mac.matches("00:08:00:..:..:.."))"로 바꿔주면 필터링이 됩니다^^
반응형
'Study > Android' 카테고리의 다른 글
smoothie chart (스무디 차트)를 이용한 차트 (0) | 2015.02.11 |
---|---|
google chart(구글 차트)를 이용한 그래프 (0) | 2015.02.11 |
폰과 태블릿 구분하기 (0) | 2015.02.11 |
속도빠른 안드로이드 에뮬레이터 제니모션 (0) | 2015.02.11 |
TimerTask and Timer 를 이용한 간단한 타이머 만들기 (0) | 2015.02.11 |