문제

Python 스크립트 내에서 내 네트워크의 특정 MAC 주소를 검색하고 싶습니다.네트워크의 모든 활성 IP 주소에 대한 맵이 이미 있지만 MAC 주소를 수집하는 방법을 알 수 없습니다.어떤 아이디어가 있나요?

도움이 되었습니까?

해결책

당신은 필요 ARP.Python의 표준 라이브러리에는 이에 대한 코드가 포함되어 있지 않으므로 외부 프로그램을 호출하거나(OS에 'arp' 유틸리티가 있을 수 있음) 직접 패킷을 작성해야 합니다(아마도 다음과 같은 도구를 사용하여) 스캐피.

다른 팁

이 기사, "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())
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top