Python3에서 IP, MAC 주소 가져오기

mer1·2021년 4월 1일
0

개요

최근에 ARP 스푸핑 공격 실습을 위해 파이썬으로 스크립트를 작성하고 있었다. 공격을 위해서는 호스트 PC의 IP, MAC 주소를 알아야 했는데, 노트북에 VMware와 그 안에 수많은 게스트 OS들이 존재했다.
socket.gethostbyname(socket.gethostname()) 명령어로는 가상 환경의 IP 주소만 얻을 수 있었지만 구글링을 통해 이를 해결하였고 기록을 남겨두고자 한다.

IP 주소

import socket

파이썬에는 네트워크에 관련된 필요한 대부분의 기능을 제공하는 socket 모듈이 존재한다.

socket 모듈을 통해 IP 주소 획득도 가능하다.

print(socket.gethostbyname(socket.gethostname())) - (1)
print(socket.gethostbyname(socket.getfqdn())) - (2)
print(socket.gethostbyname_ex(socket.getfqdn())) - (3)

보통은 IP 주소를 얻기 위해 위의 명령어를 사용한다.

그러나, 내 환경에서는 호스트 PC의 IP 주소 192.168.123.108이 아닌 192.168.0.1이 출력이 된다.

물론 (3) 명령어를 이용해서 모든 IP 주소를 획득한 후 골라내는 방법도 있지만 이보다 좋은 방법이 있다.

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
s.close()

위 명령어를 통해 UDP 소켓을 외부 IP(구글 DNS 서버)에 연결하여 외부 시스템에 도달하기 위해 사용해야 하는 로컬 IP 주소를 파악할 수 있다.

실행 결과는 위 그림과 같다. 이 방법의 단점은 인터넷이 연결되어 있지 않은 경우 IP 주소를 얻어올 수 없다.

MAC 주소

import re
from uuid import getnode

print("MAC : ",':'.join(re.findall('..', '%012x' % getnode())))

파이썬 내장 모듈을 이용해서 MAC 주소를 얻을 수 있다.

실행 결과는 위 그림과 같다.


참고문헌

https://see-ro-e.tistory.com/173
https://stackoverflow.com/questions/159137/getting-mac-address

profile
정보보안을 공부하는 학생 (github 블로그로 이사갔습니다!)

0개의 댓글