소개
TCP 및 UDP 포트 스캔 실습에 오신 것을 환영합니다. 포트 스캔은 네트워크 관리자와 보안 전문가가 컴퓨터 네트워크에서 활성화된 서비스를 발견하기 위해 사용하는 기본적인 기술입니다. 대상 시스템에 특정 네트워크 패킷을 보내고 그 응답을 분석함으로써, 어떤 포트가 열려 있고, 닫혀 있으며, 방화벽에 의해 필터링되고 있는지 확인할 수 있습니다.
포트가 열려 있다고 해서 반드시 "취약하다"는 의미는 아니지만, "접근 가능한 서비스 경계"가 존재한다는 뜻입니다. 이것이 바로 포트 스캔이 정찰 단계의 핵심인 이유입니다. 포트 스캔은 시스템이 네트워크에 노출하고 있는 문 (door) 을 식별합니다.
이번 실습에서는 네트워크 탐색을 위한 업계 표준 도구인 Nmap(Network Mapper) 을 사용하여 네트워크 포트 스캔의 저수준 메커니즘을 살펴봅니다. 신뢰할 수 있는 TCP Connect 스캔, 은밀한 TCP SYN 스캔, 그리고 연결 지향적이지 않은 UDP 포트 스캔이라는 세 가지 유형의 스캔을 수행하는 방법을 배웁니다. 실습을 통해 다양한 네트워크 프로토콜이 스캔 프로브에 어떻게 반응하는지 이해하게 될 것입니다.
TCP Connect 스캔 실행 (-sT)
이번 단계에서는 TCP Connect 스캔을 수행하는 것으로 시작합니다. 현재 기본 작업 디렉터리는 ~/project입니다.
TCP Connect 스캔은 가장 직관적인 포트 스캔 방식입니다. 이 방식은 운영 체제의 내장 네트워크 기능을 사용하여 대상 포트와 전체 연결을 맺습니다. 즉, 전체 TCP 3-way 핸드셰이크를 완료합니다. 먼저 SYN 패킷을 보내고, 대상으로부터 SYN-ACK 패킷을 받은 뒤, 마지막으로 ACK 패킷을 다시 보내 연결을 확립합니다.
표준 네트워킹 스택을 사용하기 때문에 개념적으로 단순하고 신뢰성이 높습니다. 또한 스캔이란 본질적으로 프로토콜이 설계된 방식대로 상호작용을 제어하는 것임을 상기시켜 줍니다.
연결을 완전히 완료하기 때문에 이 스캔은 매우 신뢰할 수 있습니다. 하지만 그만큼 "소음"이 많습니다. 전체 연결이 이루어지기 때문에 대상 시스템의 애플리케이션 로그에 연결 시도가 기록될 가능성이 매우 높으며, 관리자가 스캔을 탐지하기 쉽습니다.
Nmap 을 사용하여 현재 백그라운드에서 웹 서비스가 실행 중인 로컬 머신 (localhost) 의 8080 포트에 대해 TCP Connect 스캔을 수행해 보겠습니다. -sT 플래그는 Nmap 에게 TCP Connect 방식을 사용하도록 지시하며, -p 플래그는 포트 번호를 지정합니다.
터미널에서 다음 명령어를 실행하세요:
nmap -sT -p 8080 localhost
명령어를 실행하면 다음과 유사한 출력이 나타납니다:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-07 15:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds
출력을 보면 8080 포트가 open 상태이며 TCP 프로토콜을 사용 중임을 명확히 알 수 있습니다. 서비스는 http-proxy(Nmap 버전에 따라 다를 수 있음) 로 식별되는데, 이는 백그라운드에서 실행 중인 Python HTTP 서버와 일치합니다.
은밀한 SYN 스캔 실행 (-sS)
이번 단계에서는 더 고급 기술이자 널리 사용되는 TCP SYN 스캔, 일명 "Half-Open(반개방)" 스캔을 살펴봅니다.
TCP Connect 스캔과 달리 SYN 스캔은 3-way 핸드셰이크를 완료하지 않습니다. SYN 패킷 (연결 요청) 을 보내고 응답을 기다립니다. 대상 포트가 열려 있으면 SYN-ACK 패킷으로 응답합니다. 이때 Nmap 은 연결을 완료하기 위한 ACK 를 보내는 대신, 즉시 RST(Reset) 패킷을 보내 연결이 완전히 확립되기 전에 연결을 끊어버립니다.
이것이 SYN 스캔을 "Half-Open"이라고 부르는 이유입니다. 여전히 대상의 TCP 동작에 의존하지만, 연결이 완료되는 정도를 최소화합니다.
이 방식은 많은 애플리케이션이 완전히 확립된 연결만 기록하기 때문에 "은밀하다 (stealthy)"고 간주됩니다. 연결을 조기에 끊음으로써 SYN 스캔은 종종 애플리케이션 수준의 로깅을 우회합니다. 하지만 표준 운영 체제 기능을 사용하는 대신 원시 (raw) 네트워크 패킷을 직접 생성해야 하므로, 이 스캔은 루트 (sudo) 권한이 필요합니다.
로컬 머신의 동일한 8080 포트에 대해 SYN 스캔을 수행해 보겠습니다. -sS 플래그를 사용하여 SYN 스캔 방식을 지정합니다.
터미널에서 다음 명령어를 실행하세요:
sudo nmap -sS -p 8080 localhost
이전 단계와 유사한 출력이 나타납니다:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-07 15:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000042s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
결과는 동일하게 포트가 open으로 식별됩니다. 차이점은 내부적으로 네트워크 패킷이 교환되는 방식에 있습니다. SYN 스캔은 속도와 은밀함 때문에 sudo 권한으로 실행할 때 Nmap 의 기본 스캔 유형으로 사용됩니다.
UDP 포트 스캔 실행 (-sU)
마지막 단계에서는 TCP 에서 UDP(User Datagram Protocol) 로 초점을 옮깁니다.
UDP 는 연결 지향적이지 않은 프로토콜입니다. TCP 와 달리 데이터를 보내기 전에 연결을 확립하는 핸드셰이크 과정이 없습니다. 포트로 UDP 패킷을 보낼 때, 포트가 열려 있더라도 대상은 일반적으로 응답을 보내지 않습니다. 포트가 닫혀 있을 때만 "ICMP Port Unreachable" 오류로 응답합니다.
이러한 비대칭성 때문에 UDP 스캔은 해석하기가 더 어렵습니다. 응답이 없다는 것이 성공인지, 필터링된 것인지, 아니면 아무것도 없는 것인지 알 수 없기 때문입니다. 따라서 분석가는 TCP 결과보다 UDP 결과를 더 신중하게 읽어야 합니다.
이로 인해 UDP 스캔은 매우 어렵고 느립니다. Nmap 이 UDP 패킷을 보냈는데 응답이 없으면, 포트가 열려 있고 조용히 데이터를 수신 중인지, 아니면 방화벽이 패킷을 단순히 차단했는지 확신할 수 없습니다. 따라서 Nmap 은 이러한 포트를 종종 open|filtered로 보고합니다.
로컬 머신에서 현재 서비스를 호스팅하지 않는 임의의 포트 (예: 5353) 에 대해 UDP 스캔을 수행해 보겠습니다. 이는 포트가 명시적으로 닫혀 있을 때 운영 체제가 어떻게 반응하는지 보여줍니다. SYN 스캔과 마찬가지로 UDP 스캔도 원시 패킷을 생성하기 위해 루트 권한이 필요합니다.
터미널에서 다음 명령어를 실행하세요:
sudo nmap -sU -p 5353 localhost
스캔은 TCP 스캔보다 약간 더 오래 걸릴 수 있습니다. 완료되면 다음과 유사한 출력이 나타납니다:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-07 15:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000038s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
5353/udp closed zeroconf
Nmap done: 1 IP address (1 host up) scanned in 1.09 seconds
상태가 closed로 보고된 것을 확인하세요. Nmap 이 닫힌 포트로 UDP 패킷을 보내면, 대상 운영 체제는 일반적으로 "ICMP Port Unreachable" 오류 메시지로 응답합니다. Nmap 은 이 명시적인 오류를 받았기 때문에 포트를 closed로 확신할 수 있습니다. 만약 이 포트에서 서비스가 실행 중인데 응답하지 않는 경우 (UDP 앱에서 흔함), Nmap 은 ICMP 오류를 받지 못하므로 포트 상태를 open|filtered와 같이 모호하게 보고할 것입니다. 이러한 ICMP 오류 메시지에 대한 의존성은 UDP 포트 스캔의 특징입니다.
요약
축하합니다! TCP 및 UDP 포트 스캔 실습을 성공적으로 완료했습니다.
이번 실습에서는 Nmap 을 사용하여 다양한 유형의 네트워크 스캔을 수행하는 방법을 배웠습니다. 전체 3-way 핸드셰이크를 완료하는 신뢰할 수 있지만 소음이 많은 TCP Connect 스캔 (-sT) 으로 시작했습니다. 그 다음, 기본 로깅을 회피하기 위해 연결을 반개방 상태로 두어 포트를 식별하는 은밀한 TCP SYN 스캔 (-sS) 을 수행했습니다. 마지막으로 연결 지향적이지 않은 UDP 스캔 (-sU) 의 복잡성을 탐구하며, 왜 UDP 포트가 종종 open|filtered로 나타나는지 이해했습니다.
이러한 기본적인 스캔 기술은 네트워크 토폴로지를 이해하고 무단 액세스로부터 시스템을 보호하는 데 필수적인 역량입니다.



