파이썬 프로그래밍 열린 포트 확인
스크립트
import socket
def port_scan(host, port):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1) # 타임아웃 설정 (초 단위)
result = sock.connect_ex((host, port))
if result == 0:
print(f"Port {port} is open")
else:
print(f"Port {port} is closed")
sock.close()
except Exception as e:
print(f"Error scanning port {port}: {e}")
def main():
host = input("Enter the target host IP address: ")
start_port = int(input("Enter the starting port number: "))
end_port = int(input("Enter the ending port number: "))
print(f"Scanning ports {start_port} to {end_port} on host {host}...")
for port in range(start_port, end_port + 1):
port_scan(host, port)
if __name__ == "__main__":
main()
1. 스캔할 대상 호스트의 IP 주소를 입력
2. 스캔할 포트 범위의 시작 포트 번호 입력
3. 스캔할 포트 범위의 끝 포트 번호 입력
4. 지정된 포트 범위를 스캔하여 열려있거나 닫혀있는 포트의 상태를 출력
import socket
socket의 모듈을 가져옵니다. (이 모듈은 네트워크 통신에 사용됩니다)
def port_scan(host, port)
port_scan 함수를 정의합니다. 이 함수는 주어진 호스트와 포트 번호를 이용하여 포트 스캔을 수행합니다.
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
TCP 소켓을 생성합니다. socket.AF_INET은 IPv4 주소 체계를 사용하고 socket.SOCK_STREAM은 TCP 소켓을 의미합니다.
sock.settimeout(1)
소켓의 타임아웃을 1초로 설정합니다. (연결 시도가 지정된 시간 내에 이루어지지 않으면 타임아웃이 발생합니다)
result = sock.connect_ex((host, port))
connect_ex() 메서드를 사용해서 지정된 호스트 및 포트로 연결을 시도합니다. (result에는 연결 결과가 반환됩니다)
* 연결 결과가 0이면 해당 포트는 열려 있고, 그렇지 않으면 포트가 닫혀 있음을 나타내고 메시지를 출력합니다.
sock.close()
소켓을 닫습니다.
except Exception as e:
예외가 발생하면 해당 예외를 출력합니다.
* 열려 있는 포트를 확인했습니다.
80번 포트 : HTTP 서비스에 사용되는 표준 포트
135번 포트 : RPC(remote procedure call)서비스에 사용되는 것으로 네트워크 상에서 프로세스 간 통신을 위한 프로토콜입니다. (클라이언트 컴퓨터는 원격 시스템의 프로시저를 호출하고 실행할 수 있습니다)
445번 포트 : SMB 프로토콜로 (파일 공유 프린터 공유 네트워크 리소스 및 서비스에 대한 액세스 등을 위해 사용됩니다) 주로 로컬 및 원격 시스템 간의 파일 및 프린터 공유를 위해 사용됩니다.