노트북의 이더넷 포트에 이더넷이 연결된 임베디드 보드가 있다고 가정해 보겠습니다. 네트워크 구성에 대해서는 (아직) 아무것도 모릅니다. 부팅되는 것은 알지만 헤드가 없고 이더넷 포트만 있습니다. (아직) IP 주소가 없습니다.
장치의 MAC 주소를 어떻게 알 수 있나요?
arp, arping, arp-scan, arpwatch를 살펴봤습니다. 내가 찾은 유일한 것은 tshark를 사용하고 분출물을 수동으로 빗질하는 것입니다.
답변1
일반 실행을 실행하면 컴퓨터에서 발생하는 모든 트래픽도 기록되기 때문에 지저분한 출력이 생성됩니다 tshark
.tcpdump
노력하다
tcpdump -i eth0 -lenq 'ether src not <your_mac>'
-e
이더넷 프레임도 캡처합니다.-l
즉시 stdout 버퍼를 플러시합니다.-n
호스트 이름을 확인하지 마세요-q
좀 더 조용히 하세요.<your_mac>
예를 들어 찾은 로컬 인터페이스의 MAC 주소로 바꾸십시오ip addr show
.- 분명히
eth0
올바른 인터페이스로 교체하십시오. Windows를 사용하는 경우tshark -D
모든 인터페이스를 나열하려면 을 사용하세요. - (편집하다)Linux에서는 전체 패키지를 설치해야 하는
tcpdump
설치 대신 사용할 수 있습니다 . Ubuntu에 사전 설치되어 있어야 합니다(meta-package에 있음 ).tshark
wireshark
tcpdump
ubuntu-standard
대안:소스 MAC 주소를 출력으로만 사용하려면 다음을 수행하십시오(아래 OP 설명에서 영감을 받아 뻔뻔하게 적용됨).
ETH=eth0;MAC=$(cat /sys/class/net/$ETH/address); tcpdump -lenq -i $ETH "ether src not $MAC" | awk '{print $2}'
링크 없이 캡처를 시작한 다음 케이블을 연결하는 것이 가장 좋습니다.
트래픽을 스니핑하는 방법은 없다고 생각합니다. ARP가 실패하는 이유는 장치에 IP 주소가 없고 ARP 요청에 응답하지 않기 때문입니다.
또 다른 가능한 해결 방법은 장치를 관리되는 스위치에 연결하고 MAC 주소 테이블을 읽는 것입니다. 그러나 제 생각에는 이것이 귀하에게 적합한 옵션이 아닌 것 같습니다.
어떤 경우든 감지 가능하려면 장치가 다음을 전송해야 합니다.일부일종의 이더넷 트래픽입니다. 운이 좋다면 스니핑할 수 있는 DHCP/Bootp 검색을 보냅니다.
(편집하다)호스트가 스위치처럼 MAC 테이블을 보유하지 않는 이유는 무엇입니까? 글쎄요, 스위치가 아니기 때문에 그럴 필요는 없습니다. 스위치와 달리 어떤 인터페이스가 이더넷 프레임을 내보낼지는 라우팅 테이블에 따라 미리 결정됩니다. IP 패킷은 ARP 조회 후 적절한 프레임에 래핑됩니다.
물론, 컴퓨터를 적절한 L2 스위치로 전환할 수 있습니다. 여러 물리적 인터페이스 사이에 브리지를 생성할 수 있습니다. 나는 이것을 조금 만지작거렸고, 그런 식으로 멋진 MAC 테이블을 얻을 수 있다는 것이 밝혀졌습니다!
bridge-utils
저장소에서 설치합니다 .다음에 새 이더넷 브리지를 만듭니다.
/etc/network/interfaces
auto br0 iface br0 inet static # dhcp goes as well address ... network ... bridge_ports eth0 up /sbin/brctl setageing br0 300 up /sbin/brctl stp br0 0
이는 스패닝 트리 없이 "브릿지"(실제로 브릿지는 없고 하나의 인터페이스만 있음)를 정의합니다 stp br0 off
. 주소는 300초 후에 만료됩니다. 원하는 대로 설정하되 너무 낮지는 않게 설정하세요.
브리지를 위로 올리세요:
ifup br0
문제가 없는지 확인
brctl show
하고 MAC 테이블을 확인하세요.brctl showmacs br0
이익 (?)
답변2
Wireshark를 사용하여 모든 트래픽을 캡처하고 bootp로 필터링하거나 -e
옵션을 사용하여 tcpdump로 링크 계층 정보 및 bootp 필터를 인쇄할 수 있습니다.
http://www.tcpdump.org/tcpdump_man.html
sudo tcpdump -i any port bootps -e