-
PyQt5를 사용한 IP 스캐너 GUI 애플리케이션기술(Tech) 2024. 7. 31. 11:58반응형
이번 포스팅에서는 PyQt5를 사용하여 IP 주소를 스캔하는 GUI 애플리케이션을 만드는 방법을 공유하겠습니다. 이 애플리케이션은 AbuseIPDB 및 VirusTotal API를 사용하여 IP 주소의 평판을 확인합니다. 이 프로젝트는 PyQt5 애플리케이션 내에서 API 요청 통합, 동시 처리를 위한 스레딩, 입력 및 출력을 위한 사용자 친화적 인터페이스를 보여줍니다.프로젝트 개요
이 애플리케이션은 사용자가 IP 주소를 수동으로 입력하거나 CSV 파일에서 로드할 수 있도록 합니다. 그런 다음 IP 주소를 AbuseIPDB 및 VirusTotal API와 비교하여 국가, 도메인, 학대 신뢰도 점수, 악성 활동과 같은 평판에 대한 정보를 검색합니다. 결과는 애플리케이션에 표시되고 CSV 파일에 저장됩니다.
주요 기능
- GUI 인터페이스: PyQt5로 구축된 이 애플리케이션은 직관적이고 사용하기 쉬운 인터페이스를 제공합니다.
- API 통합: AbuseIPDB 및 VirusTotal API를 활용하여 IP 평판을 확인합니다.
- 동시성: 스레딩을 사용하여 API 요청을 동시에 수행하여 성능을 개선합니다.
- 파일 입출력: CSV 파일에서 IP 주소를 로드하고 결과를 CSV 파일에 저장하는 것을 지원합니다.
필수 조건이 애플리케이션을 실행하려면 다음이 필요합니다.
- Python 3.x
- PyQt5
- Requests library
pip를 사용하여 필요한 라이브러리를 설치합니다:pip install PyQt5 requests
코드 분석
API 키 구성
먼저 AbuseIPDB와 VirusTotal에 대한 API 키를 설정합니다. 이 키는 안전하게 보관해야 하며 공개적으로 공유해서는 안 됩니다.# Basic API Key Configuration default_abuseipdb_apikey = 'your_abuseipdb_apikey_here' # Replace with your AbuseIPDB API Key default_virustotal_apikey = 'your_virustotal_apikey_here' # Replace with your VirusTotal API Key # Replace with your AbuseIPDB API Key abuseipdb_apikey = default_abuseipdb_apikey virustotal_apikey = default_virustotal_apikey
IPCheckThread 클래스
이 클래스는 IP 주소의 실제 검사를 처리합니다. API 요청을 수행하고 응답을 처리합니다.class IPCheckThread(QThread): progress = pyqtSignal(int) finished = pyqtSignal() log = pyqtSignal(str) result = pyqtSignal(str) def __init__(self, ip_list, output_file): super().__init__() self.ip_list = ip_list self.output_file = output_file def check_ip_abuseipdb(self, ip_address): # AbuseIPDB API request implementation def check_ip_virustotal(self, ip_address): # VirusTotal API request implementation def run(self): # Thread execution logic
MyApp 클래스
이 클래스는 메인 애플리케이션 창과 그 기능을 정의합니다.class MyApp(QMainWindow): def __init__(self): super().__init__() self.initUI() self.createTrayIcon() def initUI(self): self.setWindowTitle('IP Scanner') self.setGeometry(300, 300, 600, 600) # Setting up the status bar, toolbar, and layout # Adding widgets for API key input, IP input, and buttons # Implementing file dialog and tray icon functionalities def createTrayIcon(self): # Tray icon creation and setup def applyAbuseIPDBApiKey(self): global abuseipdb_apikey abuseipdb_apikey = self.abuseipdbApiKeyInput.text() self.updateLog("AbuseIPDB API Key applied.") def applyVirusTotalApiKey(self): global virustotal_apikey virustotal_apikey = self.virustotalApiKeyInput.text() self.updateLog("VirusTotal API Key applied.") def clearResults(self): self.resultBox.clear() self.updateLog("Results cleared.") def showDialog(self): options = QFileDialog.Options() options |= QFileDialog.ReadOnly fileName, _ = QFileDialog.getOpenFileName(self, "Open CSV File", "", "CSV Files (*.csv);;All Files (*)", options=options) if fileName: self.fileLabel.setText(fileName) self.outputFileName = fileName.replace('.csv', '_results.csv') self.startScanFromFile(fileName, self.outputFileName) def startSearch(self): ip_text = self.ipInput.toPlainText() ip_list = [ip.strip() for ip in ip_text.split('\n') if ip.strip()] self.outputFileName = 'output_results.csv' self.startScan(ip_list, self.outputFileName) def startScan(self, ip_list, output_file): self.thread = IPCheckThread(ip_list, output_file) self.thread.progress.connect(self.progressBar.setValue) self.thread.log.connect(self.updateLog) self.thread.result.connect(self.appendResult) self.thread.finished.connect(self.scanFinished) self.thread.start() def updateLog(self, message): self.logLabel.setText(message) def appendResult(self, result): self.resultBox.append(result) def scanFinished(self): self.updateLog(f"Scan finished. Results saved to {self.outputFileName}")
Main Function
애플리케이션의 진입점은 PyQt5 애플리케이션을 초기화하고 메인 창을 시작합니다.
def main(): app = QApplication(sys.argv) ex = MyApp() sys.exit(app.exec_()) if __name__ == '__main__': main()
결론
이 프로젝트는 PyQt5를 사용하여 기능이 풍부한 GUI 애플리케이션을 만드는 방법을 보여줍니. AbuseIPDB 및 VirusTotal API와의 통합은 외부 데이터 소스를 애플리케이션에 통합하는 방법을 보여줍니다. 스레딩을 사용하면 애플리케이션의 성능이 향상되어 여러 IP 주소를 동시에 처리할 때에도 응답성이 뛰어납니다.
필요에 맞게 이 프로젝트를 사용자 지정하고 확장하세요. 질문이 있거나 추가 지원이 필요하면 아래에 댓글을 남겨주세요!반응형'기술(Tech)' 카테고리의 다른 글
2025년 주목할 기술 트렌드 5가지 (1) 2024.11.29 생산성을 높여주는 AI 도구 TOP 10 (2) 2024.11.29 포테이너(Portainer)를 활용한 WAS 구축하기(1/2) (0) 2023.09.08 noSQL과 DynamoDB (1) 2023.04.25 역량검사(역검) 준비 방법과 꿀팁, 게임 파헤치기, 합격자 후기 (0) 2023.04.19