토론

파이썬 포트 스캐너와 윤리적 해킹 원칙

Wikiprompt, 무료 프롬프트 백과사전에서

Millie Marconi

2025년 6월 18일

파이썬 포트 스캐너와 윤리적 해킹 원칙 IP 범위를 스캔하여 열린 포트와 취약점을 찾는 Python 스크립트를 생성하는 프롬프트로, 윤리적 해킹과 안전한 스캔을 강조합니다.

프롬프트 내용저장

🌐
import socket import sys import ipaddress from datetime import datetime import threading from queue import Queue # 윤리적 해킹 원칙 준수 - 반드시 명시적 허가를 받은 후에만 사용 print("=" * 60) print("윤리적 포트 스캐너 - 허가된 시스템에서만 사용하세요") print("=" * 60) # 안전한 스캔을 위한 설정 COMMON_PORTS = [21, 22, 23, 25, 53, 80, 110, 111, 135, 139, 143, 443, 445, 993, 995, 1723, 3306, 3389, 5900, 8080] TIMEOUT = 1.0 # 연결 타임아웃 (초) MAX_THREADS = 50 # 동시 스레드 수 제한 def get_target_range(): """사용자로부터 IP 범위를 입력받습니다.""" while True: try: target = input("스캔할 IP 범위를 입력하세요 (예: 192.168.1.0/24 또는 192.168.1.1-192.168.1.100): ") # CIDR 표기법 처리 if '/' in target: network = ipaddress.ip_network(target, strict=False) return [str(ip) for ip in network.hosts()] # 하이픈 범위 처리 elif '-' in target: start_ip, end_ip = target.split('-') start = int(ipaddress.IPv4Address(start_ip.strip())) end = int(ipaddress.IPv4Address(end_ip.strip())) if start > end: print("시작 IP가 종료 IP보다 클 수 없습니다.") continue return [str(ipaddress.IPv4Address(ip)) for ip in range(start, end + 1)] # 단일 IP 처리 else: ipaddress.IPv4Address(target) return [target] except ValueError: print("잘못된 IP 형식입니다. 다시 입력해주세요.") except KeyboardInterrupt: print("\n스캔을 취소합니다.") sys.exit(0) def scan_port(ip, port): """단일 포트를 스캔합니다. 안전한 연결 시도를 수행합니다.""" try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(TIMEOUT) result = sock.connect_ex((ip, port)) sock.close() return result == 0 except socket.error: return False except KeyboardInterrupt: return False def worker(ip, ports, results, print_lock): """스레드 워커 함수 - 포트 스캔을 수행합니다.""" while not ports.empty(): try: port = ports.get_nowait() except Queue.Empty: break if scan_port(ip, port): with print_lock: print(f"[+] 포트 {port} 열림 - {ip}") results[ip].append(port) ports.task_done() def scan_ip(ip, ports_to_scan): """단일 IP에 대해 포트 스캔을 수행합니다.""" print(f"\n[스캔 시작] 대상 IP: {ip}") print(f"[시간] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") results = {ip: []} port_queue = Queue() for port in ports_to_scan: port_queue.put(port) print_lock = threading.Lock() threads = [] # 스레드 풀 생성 for _ in range(min(MAX_THREADS, len(ports_to_scan))): t = threading.Thread(target=worker, args=(ip, port_queue, results, print_lock)) t.daemon = True t.start() threads.append(t) # 모든 스레드 완료 대기 port_queue.join() return results[ip] def check_common_vulnerabilities(ip, open_ports): """열린 포트에 대한 기본적인 취약점 정보를 제공합니다.""" vulnerabilities = [] # 포트별 알려진 서비스 및 잠재적 취약점 매핑 port_services = { 21: "FTP - 익명 접속 허용 여부 확인 필요", 22: "SSH - 버전 확인 및 무차별 대입 공격 위험", 23: "Telnet - 암호화되지 않은 통신 위험", 25: "SMTP - 스팸 릴레이 가능성 확인", 53: "DNS - 캐시 포이즈닝 위험", 80: "HTTP - 웹 서버 취약점 스캔 권장", 110: "POP3 - 암호화되지 않은 메일 전송", 135: "MS-RPC - 원격 코드 실행 위험", 139: "NetBIOS - 정보 노출 위험", 143: "IMAP - 암호화되지 않은 메일 전송", 443: "HTTPS - SSL/TLS 버전 확인 필요", 445: "SMB - EternalBlue 등 취약점 위험", 993: "IMAPS - 인증서 유효성 확인", 995: "POP3S - 인증서 유효성 확인", 1723: "PPTP - 암호화 취약점 위험", 3306: "MySQL - 원격 접속 허용 여부 확인", 3389: "RDP - BlueKeep 등 취약점 위험", 5900: "VNC - 인증 우회 위험", 8080: "HTTP-Proxy - 오픈 프록시 위험" } for port in open_ports: if port in port_services: vulnerabilities.append(f"포트 {port}: {port_services[port]}") return vulnerabilities def main(): """메인 함수 - 스캔 프로세스를 관리합니다.""" try: # 대상 IP 범위 입력 target_ips = get_target_range() print(f"\n[대상 IP 수] {len(target_ips)}개") print("[스캔 포트] 공통 포트 목록") print("[주의] 이 스캔은 허가된 시스템에서만 수행하세요") confirm = input("\n스캔을 시작하시겠습니까? (y/n): ").lower() if confirm != 'y': print("스캔을 취소합니다.") return all_open_ports = {} # 각 IP에 대해 스캔 수행 for ip in target_ips: try: open_ports = scan_ip(ip, COMMON_PORTS) all_open_ports[ip] = open_ports # 취약점 정보 출력 if open_ports: vulnerabilities = check_common_vulnerabilities(ip, open_ports) if vulnerabilities: print(f"\n[취약점 분석] {ip}") for vuln in vulnerabilities: print(f" - {vuln}") else: print(f"[결과] {ip} - 열린 포트 없음") except socket.gaierror: print(f"[오류] {ip} - 호스트 이름을 확인할 수 없습니다.") except socket.error as e: print(f"[오류] {ip} - 네트워크 오류: {e}") except KeyboardInterrupt: print("\n[중단] 사용자에 의해 스캔이 중단되었습니다.") break # 최종 요약 출력 print("\n" + "=" * 60) print("[스캔 완료 요약]") print("=" * 60) total_open = 0 for ip, ports in all_open_ports.items(): if ports: print(f"\n{ip}:") for port in ports: print(f" - 포트 {port} 열림") total_open += 1 if total_open == 0: print("열린 포트가 발견되지 않았습니다.") else: print(f"\n총 {total_open}개의 열린 포트가 발견되었습니다.") print(f"\n[종료 시간] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print("[윤리적 고지] 이 정보는 보안 강화 목적으로만 사용하세요") except KeyboardInterrupt: print("\n\n[중단] 스캔 프로세스가 중단되었습니다.") sys.exit(0) except Exception as e: print(f"\n[오류] 예상치 못한 오류 발생: {e}") sys.exit(1) if __name__ == "__main__": main()

전체 프롬프트를 보려면 로그인하세요

Continue with:

By logging in, you agree to our Terms of Use and Privacy Policy

사용법

이 프롬프트는 coding와 함께 사용하도록 설계되었습니다. 위의 프롬프트 내용을 복사하여 원하는 AI 도구에 붙여넣으세요.

최상의 결과를 얻으려면 자리 표시자(대괄호 또는 대문자로 표시)를 특정 요구 사항으로 사용자 지정할 수 있습니다.

참고 자료

분류:coding| twitter| cybersecurity| ethical-hacking

토론