“Who 's Home”프로젝트를 위해 라우터에서 MAC 주소를 가져 오는 방법이 필요합니다


11

이런 종류의 프로젝트는 전에 블루투스로 수행되었지만 30 피트 범위와 추가 배터리 소비로 인해 사람들의 전화 대신 라우터를 핑하고 싶습니다. 라우터가 각 장치의 고유 한 MAC 주소를 추적한다는 것을 알고 있습니다. 각 전화의 주소를 등록하고 PI가 정기적으로 라우터를 확인하여 누가 집에 왔는지 동적 웹 페이지를 업데이트하도록했습니다.

PI로이 정보를 가져 오는 합리적인 방법이 있는지 알고 싶습니다.


Wi-Fi (전화 호스트 이름 대신 ping)는 어떻습니까?
user236012

2
라우터에서 고정 IP 주소를 할당 한 다음 nmap 및 IP 주소를 사용하여 장치를 식별 할 수도 있습니다.
ArtOfCode

Windows의 C #에서 비슷한 것을 수행했습니다 : stackoverflow.com/questions/2567107/…- 원한다면 최신 버전 코드를 보내 드리겠습니다. C #이 Raspberry Pi에 얼마나 유용한 지 잘 모르겠지만 올바른 방향으로 안내해야합니다. 차고에서 차를 타기 전에 집에 있다는 것을 확실하게 감지합니다.
Aric TenEyck

나는 매분마다 웹 서버에 결과를 게시하는 라우터에 bash 스크립트를 넣음 으로써이 + 훨씬 더 많은 정보를 포착합니다. 이 시스템을 통해 인터넷 가동 시간, 연결된 클라이언트, WAN IP, 광 감쇠 및 전력 예산, VOIP 서비스, wifi 암호 등을 모니터링하고 관리합니다. 마일리지는 라우터의 CPU 성능에 따라 다릅니다.
EDP

1
라우터의 화면 스크래핑? Linux 기반 라우터 (openwrt)로 업그레이드하고 간단히 로그인하여 arp 캐시를 살펴볼 수도 있습니다.
Thorbjørn Ravn Andersen 님이

답변:


6

것이 가능하다. 스크립트에 로그인 자격 증명을 제공하고 정보를 표시하는 페이지를 읽으십시오. 그런 다음 내용을 구문 분석하고 원하는 데이터로 배열을 채울 수 있습니다. 이 페이지에는 날짜 및 시간과 같은 더 많은 정보가 포함되어 있기 때문에 정말 멋진 로그를 만들 수 있습니다.

다음은 진행 방법에 대한 간단한 예입니다.

라우터 페이지에서 다음과 같은 것을 찾을 수 있습니다.

<div id="flex">
 <div id="dm-name">
  name : Your_device_name
 </div>
 <div id="dm-ip">
  IP : 192.168.x.xxx
 </div>
 <div id="dm-mac">
  <span>MAC:D4:04:CD:FE:5A:17</span>
 </div>
</div>

그래서 우리는 모든 장치가 그렇게 나열 될 것이라는 것을 알고 있습니다. 그리고 모든 MAC 주소의 길이는 같습니다.

스크립트는 그런 식일 수 있습니다.

var string_to_parse = "file read from router.html";
cursor = 0;  // The position of your cursor;
i =0;
    while(cursor > 0){

    begin_at = string_to_parse.indeOf('MAC:');
    end_at = length_of_Mac; // this is standard for al mac

    mac[i] = string_to_parse.substring(begin_at, begin_at + end_at);
    cursor = begin_at + end_at;
i++;
    }

이 코드는 수정이 필요하지만 아이디어가 있습니다. 모든 파일을 실행하여 모든 Mac 주소를 찾는 루프입니다. 파일 끝에 도달 할 때까지


이것이 내가 할 일입니다. 라우터가 죽었는지 감지하는 추가 보너스가 있습니다.
slebetman

1
+1 웹 사이트 스크래핑은 흥미로운 선택입니다. 나는 그것을 스스로 생각하지 않았기 때문에 약간 화가났다.
Jacobm001

@MadeInDreams 참조하는 라우터 페이지는 라우터 DHCP 임대 페이지입니까? 아니면 라우터 활성 연결 페이지가 있습니까?
Chetan Bhargava 2019

라우터에 따라 다르지만 대부분 연결된 모든 장치가 나열된 페이지가 있습니다. 이 예는 내 네트워크 메인 페이지에서 온 것입니다
MadeInDreams

6

Raspberry Pi에서 고유 한 Mac 주소를 추적하려면 arpwatch 라는 도구 (서비스가 아님)가 필요합니다 . BSD에서 arpwatch를 광범위하게 사용했으며 모든 arp 및 rarp 요청을 syslog에 기록합니다.

Syslog에서 날짜와 시간 및 mac 주소를 구문 분석 할 수 있습니다.

ARP 작업 및 테이블은 실제 네트워크 (기술 단어 : 충돌 도메인)에만 존재합니다. 패킷이 다른 네트워크로 나가면 소스 mac 주소가 라우터의 mac 주소로 바뀝니다.

실행 arp라즈베리 파이에 명령 만 명령이 실행되는 호스트 (라즈베리 파이)와 거래 한 호스트 (IP 통신)의 맥 + IP 주소를 나열합니다. 네트워크에있는 다른 호스트의 mac 주소 는 표시 되지 않습니다 .

또 다른 고급 방법 은 Raspberry Pi에서 nmap 을 사용 하여 호스트 검색을 수행하는 것입니다. nmap -sP네트워크의 모든 호스트를 핑 하는 데 사용할 수 있습니다 . 네트워크에서 모든 활성 호스트의 IP 주소를 알려줍니다. 그런 다음 arp 명령을 실행하여 누가 활동 중인지 mac을 찾을 수 있습니다.

chetan@Linux:~$ nmap -sP 192.168.100.0/24

Starting Nmap 6.40 ( http://nmap.org ) at 2016-02-23 16:08 PST
Nmap scan report for 192.168.100.4
Host is up (0.0087s latency).
Nmap scan report for 192.168.100.58
Host is up (0.0024s latency).
Nmap scan report for 192.168.100.160
Host is up (0.049s latency).
Nmap scan report for 192.168.100.164
Host is up (0.063s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.68 seconds

1
나는 이것이 아마도 웹 스크래핑 방법보다 훨씬 강력하고 유연한 방법이라고 생각합니다. 많은 ISP 발행 라우터에서 정보가있는 연결된 장치를 표시해야하는 페이지는 신뢰할 수 없습니다.
goldilocks

@goldilocks +1, 그렇습니다. 허용 된 답변을 찬성 한 후에 그것에 대해 생각했습니다. 활성 연결 페이지 (SPI 상태 또는 이와 유사한)가있는 라우터가 있다고 가정합니다. 그들은 좋은 라우터.
Chetan Bhargava

4

방금 커맨드 라인 버전 fing 을 가지고 놀았습니다 . 네트워크에서 모든 것을 찾고 다음을 포함하는 CSV 파일추출 하는 적절한 작업을 수행 합니다 .

  • IP 주소
  • 노드의 사용자 정의 이름 (.properties 파일에 사용자 정의 이름을 지정한 경우)
  • 상태 (UP / DOWN)
  • 마지막 변경의 타임 스탬프
  • 호스트 이름 (DNS를 활성화 한 경우)
  • 하드웨어 주소 (로컬 네트워크를 발견하는 경우)
  • 하드웨어 공급 업체

이전 답변에 따라 CSV의 내용을 웹 페이지로 가져오고 외부에 게시 하는 내용에 주의를 기울 이려면 일부 텍스트 조작이 필요합니다 .

나는 안드로이드 버전을 꽤 광범위하게 사용했으며 내 홈 네트워크의 모든 것을 찾는 데 도움이됩니다 (공용 와이파이에서 놀기 재미 있습니다).


3

이 명령 arp은 네트워크에 연결된 장치 목록을 제공합니다. 원하는 데이터를 얻으려면 기본 문자열 조작을 수행해야하지만 정보를 직접 얻는 것보다 훨씬 쉽습니다.

기능 메모 :

일부 라우터는 기본적으로이 유형의 기능을 차단하며 사용자의 구성 방식 일 수도 있습니다. 그래도 작동하지 않으면 문서를 조금 둘러보고 허용 방법을 확인하십시오.

보안 정보 :

현재 집에있는 사람을 표시하는 웹 사이트를 만들면 보안에 심각한 영향을 미칩니다. 보안이 제대로 갖추어져 있는지, 보안이 위험에 충분히 적합한 지 신중하게 생각하십시오.


좋은 생각입니다. 이전 의견을 철회 한 것 같습니다.
Ghanima

1
여기에 arp를 사용하는 것에 대한 흥미로운 몇 가지주의 사항이 있습니다 . 그들은 장치가 arp- 실행 장치로 패킷을 보내지 않으면 장치가 나타나지 않을 수 있으며 핑이 필요할 수 있다고 제안합니다.
goobering

@goobering +1. 단순히 arp 명령을 실행하면 네트워크의 모든 활성 호스트가 나열되지는 않습니다. Arpwatch는 네트워크의 모든 arp 패킷을 기록합니다.
Chetan Bhargava

1

가능하며 다른 사람들이 좋은 방법을 제안했습니다. 넷기어 라우터 에서이 정보를 화면에 표시하기 위해 몇 년 전에 파이썬 스크립트를 작성하여 github에 던졌습니다. 여기 에서 찾을 수 있습니다 . 그것은 조잡하고, 지금 그것을 보면 약간 다르게 다룰 것이지만, 내가 움직일 때까지 몇 년 동안 당신과 똑같은 목적으로 일했습니다.


+1 스크립트를 확실히 개선 할 수는 있지만 문제에 대한 훌륭한 해결책입니다.
Jacobm001
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.