네트워크의 모든 Mac 주소를 쿼리하는 방법이 있습니까?

네트워크의 모든 Mac 주소를 쿼리하는 방법이 있습니까?

나는 이 질문이 "주제에서 벗어남" 및 "비전문적"으로 표시되었다는 것을 알고 있지만 게이트웨이나 IDS를 생성할 때 이는 상당히 관련이 있을 수 있습니다. 또한 Google에서는 사용할 수 있는 항목을 찾지 못했습니다.

모든 공통 스위치에는 MAC 테이블(또는 CAM 테이블)이라는 것이 있습니다(이 문서에 따르면:https://en.wikipedia.org/wiki/CAM_Table)

스위치가 MAC 주소에 대한 경로를 정확히 알고 있고 이를 모든 포트에 광고하는 경우(논리적으로 보입니다)...

  • Linux 상자를 가정하면 쿼리가 가능합니까?모든지정된 인터페이스의 네트워크에 있는 MAC 주소는 무엇입니까?

답변1

나는 일반적으로 설치아르팔레트이 목적을 위해 시스템에. libcap을 사용하여 트래픽을 감시하는 데몬입니다. 인터페이스당 mac 주소 데이터베이스를 유지합니다. 또한 몇 가지 특이한 유형의 이벤트를 감시하고 알림을 보낼 수도 있습니다. 마지막 사용량을 추적하고 재부팅 후에도 데이터베이스를 유지합니다(브리지 인터페이스를 설정하는 것과 비교하여).

답변2

공평하게 말하자면, 모두가 "arp -a"라고 말하지만 이 대답은 만족스럽지 않습니다.모두 다 아는MAC 주소(및 해당 IP)

나열하려면모두포트의 주소를 변경하려면 현재 네트워크 구성을 변경해야 합니다. 우리는 bridge-utils 패키지를 사용할 것이지만 다른 브리지 구현(예: OpenvSwitch)도 이를 수행할 수 있습니다. 다음 설명은 Debian 기반 시스템에서 작동합니다.

  1. 먼저 bridge-utils 패키지를 설치해야 합니다.
  2. ifdown을 사용하여 선택한 포트를 아래로 설정
  3. MAC 주소를 나열하려는 포트에 브리지를 만듭니다.

포트가 eth0이고 IP 주소가 동적이라고 가정해 보겠습니다. /etc/network/interfaces에 다음이 나타나야 합니다.

allow-hotplug eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
  bridge-ports eth0
  bridge_fd 0
  bridge_stp off

이러한 변경 사항을 적용하려면 eth0에서 ifup을 사용한 다음 br0에서 사용하거나 간단히 다시 시작하면 됩니다.

  1. 이제 brctl을 사용하여 포트를 쿼리할 수 있습니다.

전체 MAC 테이블이 나열됩니다.

root@debian:~# brctl showmacs br0

출력은 다음과 같아야 합니다.

port no mac addr                is local?       ageing timer
  1     ab:cd:ef:01:02:03       no                 1.72
  1     ab:cd:ef:01:02:04       no                25.52
  1     ab:cd:ef:01:02:05       no                 2.64
  1     ab:cd:ef:01:02:06       no                10.67
  1     ab:cd:ef:01:02:07       yes                0.00

관련 정보