Python을 사용하여 MAC 주소가 있는 호스트 검색
-
01-07-2019 - |
문제
Python 스크립트 내에서 내 네트워크의 특정 MAC 주소를 검색하고 싶습니다.네트워크의 모든 활성 IP 주소에 대한 맵이 이미 있지만 MAC 주소를 수집하는 방법을 알 수 없습니다.어떤 아이디어가 있나요?
다른 팁
이 기사, "Python에서 손으로 만든 이더넷 프레임 보내기(예: ARP)"가 정확히 당신이 찾고 있는 것 같습니다.
나는 Python 자체에서 그것을 얻는 내장된 방법이 없다고 생각합니다.
내 질문은 네트워크에서 IP 정보를 어떻게 얻는가입니다.
로컬 컴퓨터에서 이를 가져오려면 ifconfig(unix) 또는 ipconfig(windows)를 별 어려움 없이 구문 분석할 수 있습니다.
순수한 Python 솔루션을 원한다면 다음을 살펴보세요. 스캐피 패킷을 작성하려면(ARP 요청을 보내고 응답을 검사해야 함)또는 외부 프로그램을 호출해도 괜찮다면 다음을 사용할 수 있습니다. arping
(Un*x 시스템에서는 Windows에 상응하는 시스템을 모릅니다).
Python에서는 이 작업을 수행하는 기본 방법이 없는 것 같습니다.가장 좋은 방법은 Windows에서는 "ipconfig /all", Linux에서는 "ifconfig"의 출력을 구문 분석하는 것입니다.일부 정규 표현식과 함께 os.popen()을 사용하는 것을 고려해보세요.
플랫폼에 따라 다릅니다.*nix를 사용하는 경우 'arp' 명령을 사용하여 지정된 IP(IPv4로 가정) 주소에 대한 mac 주소를 조회할 수 있습니다.그래도 작동하지 않으면 주소를 핑한 다음 찾아보거나 원시 네트워크에 액세스할 수 있는 경우(BPF 또는 다른 메커니즘을 사용하여) 자체 ARP 패킷을 보낼 수 있습니다(그러나 이는 아마도 과잉일 수 있습니다).
'arp'의 출력을 구문 분석하고 싶지만 커널 ARP 캐시에는 해당 호스트가 Python 스크립트가 실행 중인 호스트와 통신한 경우에만 해당 IP 주소가 포함됩니다.
ifconfig를 사용하면 로컬 인터페이스의 MAC 주소를 표시할 수 있지만 LAN의 MAC 주소는 표시할 수 없습니다.
Mark Pilgrim이 Netbios 모듈이 있는 현재 시스템에 대해 Windows에서 이 작업을 수행하는 방법을 설명합니다. 여기.python.org에서 Win32 패키지의 일부로 Netbios 모듈을 얻을 수 있습니다.불행히도 현재 모듈에서 문서를 찾을 수 없습니다.
Python은 OS 관련 문제를 처리하기 위한 것이 아니기 때문에(해석 및 크로스 플랫폼으로 가정됨) 이를 위해 외부 명령을 실행합니다.
유닉스에서 명령은 다음과 같습니다 ifconfig
파이프로 실행하면 원하는 결과를 얻을 수 있습니다.
import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())