[Python] 맥주소를 가져오는 GUI 프로그램

요즘 파이썬(Python)을 공부하는데, 

맥주소(맥어드레스,Mac Address)를 가져와서 보안장비와 연동할 수 있겠다는 생각이 들어서 찾아보니 뭔가 엉성하게 맥주소를 가져 오는 것 같다.

찾아본 여러 방법중에서 윈도우에서 오류 없이 가져 오는 방법은 "ipconfig /all" 명령어를 실행하고 그 결과값을 파싱해서 맥주소 정보를 가져오는 것이다.

하여튼 시나리오는 이렇다.

맥주소를 가져와서 디비에 저장할 예정인데, 직원들에게 맥주소를 확인해서 등록해달라면 확인하는 매뉴얼도 배포해야 한다. 그러니 그냥 실행만 하면 되는 프로그램을 만들어서 배포하고, 직원들이 실행해서 인트라넷 접속 정보를 입력하고, 피씨명과 맥주소를 확인해서 디비에 자동 등록하는 것이다. 그렇게 되면 보안장비의 맥주소 관리는 편해질 듯 하다.

구글신에게 물어 보니 여러 방법이 있는데,
가장 간단한 방법은 

from uuid import getnode as get_mac mac = get_mac()

이었지만 1개의 맥주소만 확인 가능하다. 그것도 내경우는 Bluetooth의 맥주소만 확인된다. 그리고 가장 많이 언급되는 것이 socketfcntl 를 사용하는 방법인데 fcntl 함수는 유닉스(리눅스)전용이라 윈도우에서는 안된다.

그나마 정확하고 의도한대로 나오는 것이 devlinker님의 블로그에서 찾은 방법이다.
cmd에서 "ipconfig /all"을 실행한 결과 text를 파싱하여 정보를 찾는 것이다.

 

''' Python에서 맥주소를 가져오기! ''' import sys,os, urllib.request from PyQt4.QtGui import * def getMacAddress():     arrinfo = {}     isdevice = 0     mk = 0     if sys.platform=='win32':         for line in os.popen("ipconfig /all"):             if line.lstrip().startswith('호스트'):                 host = line.split(':')[1].strip()                 arrinfo["host"] =  host             else:                 if line.lstrip().startswith('터널'):                     isdevice = 0                 if line.lstrip().startswith('이더넷'):                     isdevice = 1                 if line.lstrip().startswith('무선'):                     isdevice = 1                 if isdevice == 1:                     if line.lstrip().startswith('미디어 상태'):                         desc = line.split(':')[1].strip()                         if desc == '미디어 연결 끊김':                             isdevice = 0                     if line.lstrip().startswith('설명'):                         desc = line.split(':')[1].strip()                         if desc.lstrip().startswith('Bluetooth'):                             isdevice = 0                     if line.lstrip().startswith('물리적'):                         #mac = line.split(':')[1].strip().replace('-',':')                         mac = line.split(':')[1].strip()                         arrinfo[mk] =  mac                         isdevice = 0                         mk+=1     else:         for line in os.popen("/sbin/ifconfig"):             if line.find('Ether') >-1:                 mac=line.split()[4]                 arrinfo[mk] =  mac                 isdevice = 0                 mk+=1     return arrinfo class MyDialog(QDialog):     def __init__(self):         QDialog.__init__(self)         lblName = QLabel("Name")         self.editName = QLineEdit()         self.txtEdit = QTextEdit()         btnOk = QPushButton("Mac Address")         layout = QVBoxLayout()         layout.addWidget(lblName)         layout.addWidget(self.txtEdit)         layout.addWidget(self.editName)         layout.addWidget(btnOk)         self.setLayout(layout)         btnOk.clicked.connect(self.btnOkClicked)     def btnOkClicked(self):         #name = self.editName.text()         arrinfo = getMacAddress()         self.txtEdit.setText("HOST : "+arrinfo['host']                 +"\n"+"MAC 1 : "+arrinfo[0]                 +"\nMAC 2 : "+arrinfo[1]                 +"\nMAC 3 : "+arrinfo[2])         #QMessageBox.information(self, "Info", arrinfo[0]+arrinfo[1]) app = QApplication([]) dialog = MyDialog() dialog.show() app.exec_()

 

그리고 PyQt를 이용해서 GUI로 만들었는데, OK 버튼을 누르면 텍스트박스에 표시된다.

그런데 파이썬이라는 놈이 참 가다로운게 현재 3.6 버전이 최신이라 설치해서 테스트 중인데, 몇몇 패키지는 이 버전은 지원하지 않는다. 그래서 3.5버전으로 다시 설치 해야 겠다.
그럼 exe 파일도 만들 수 있겠지...

TODO :

urllib를 이용해서 로그인정보와 피씨명, 맥주소 정보를 인트라넷에 전달해서 회원 인증후 정보를 디비에 저장하게 하면 된다.

'Python' 카테고리의 다른 글

[Python] 환경구축 - 파이썬(아나콘다) 설치  (0) 2018.11.29