본문 바로가기

Server Story....

[Python] 파이썬으로 서버 포트 개방 여부 확인하기 (서버 관리 자동화 기초)

반응형

1. 서론: 서버 설정 후 확인, 일일이 접속해 보시나요?

지난 포스팅에서 우리는 Windows Server 2022의 RDP 포트를 보안을 위해 변경하고 방화벽 설정을 마쳤습니다. 하지만 설정이 끝난 후, 실제로 외부에서 이 포트가 제대로 열렸는지 확인하는 과정이 필요합니다.

매번 원격 접속 프로그램을 켜서 테스트하는 대신, 파이썬 스크립트 한 줄로 전 세계 어디서든 내 서버의 상태를 체크할 수 있다면 얼마나 편리할까요? 오늘은 초보 개발자도 쉽게 만들 수 있는 **'포트 체크 스캐너'**를 만들어 보겠습니다.


2. 파이썬 Socket 라이브러리 이해하기

파이썬의 socket 모듈은 네트워크 통신의 가장 바닥 단계인 '소켓'을 다루는 표준 라이브러리입니다. 우리가 웹 브라우저를 쓰거나 게임을 할 때도 내부적으로는 이 소켓 통신이 일어납니다.

우리가 만들 스크립트는 서버에 연결을 시도해보고, 서버가 "응답(ACK)"을 주는지 확인하는 TCP 핸드쉐이크 원리를 이용합니다.


3. 포트 체크 스크립트 작성 및 설명

아래는 서버 주소와 포트 번호를 입력받아 상태를 출력해주는 전체 코드입니다.

Python
 
import socket

def check_server_port(ip, port):
    # 소켓 객체 생성 (TCP 통신)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 타임아웃 설정 (3초 동안 응답 없으면 실패)
    sock.settimeout(3)
    
    try:
        # 연결 시도
        result = sock.connect_ex((ip, port))
        if result == 0:
            print(f"✅ 성공: {ip}의 {port}번 포트가 열려 있습니다!")
        else:
            print(f"❌ 실패: {ip}의 {port}번 포트가 닫혀 있거나 응답이 없습니다. (에러 코드: {result})")
    except Exception as e:
        print(f"⚠️ 오류 발생: {e}")
    finally:
        sock.close()

# 테스트 실행 (본인의 서버 IP와 변경한 RDP 포트번호를 입력하세요)
if __name__ == "__main__":
    target_ip = "123.123.123.123"  # 여기에 본인 서버 IP 입력
    target_port = 58293             # 여기에 변경한 RDP 포트 입력
    check_server_port(target_ip, target_port)

코드 주요 포인트 설명:

  • socket.AF_INET: IPv4 주소 체계를 사용하겠다는 의미입니다.
  • socket.SOCK_STREAM: TCP 연결 방식을 사용합니다.
  • connect_ex(): 연결 성공 시 0을 반환하고, 실패 시 에러 코드를 반환합니다. 일반 connect() 함수와 달리 프로그램이 멈추지 않고 에러를 처리하기에 적합합니다.
  • settimeout(3): 서버가 무응답일 때 무한정 기다리지 않도록 3초의 제한 시간을 둡니다.

4. 실전 활용 및 문제 해결(Troubleshooting)

스크립트를 실행했을 때 실패가 뜬다면 다음 사항을 점검해야 합니다.

  1. 서버 내부 방화벽: 지난번 설정한 인바운드 규칙이 활성화되어 있는지 확인하세요.
  2. 클라우드 보안 그룹: AWS나 Azure를 사용 중이라면 클라우드 콘솔에서 해당 포트를 허용(Allow)했는지 체크해야 합니다.
  3. 공인 IP 주소: 서버 내부의 사설 IP가 아닌, 외부에서 접속 가능한 **공인 IP(Public IP)**를 입력했는지 확인하세요.


5. 마무리하며: 자동화의 첫걸음

오늘 만든 스크립트를 발전시키면 여러 대의 서버 상태를 한 번에 모니터링하거나, 포트가 닫혔을 때 텔레그램으로 알림을 보내는 자동화 시스템을 구축할 수 있습니다. 서버 관리자에게 코딩 실력은 단순한 옵션이 아니라 강력한 무기가 됩니다.

반응형