Curl 을 사용한 고급 포트 액세스
이제 다양한 포트에서 Curl 을 사용하는 기본 사항을 이해했으므로 포트 액세스 및 테스트를 위한 보다 고급 기술을 살펴보겠습니다.
포트 가용성 테스트
Curl 을 사용하여 서버에서 특정 포트가 열려 있는지 확인할 수 있습니다. 포트가 열려 있으면 Curl 은 연결을 시도하고 잠재적으로 데이터를 수신합니다. 포트가 닫혀 있으면 Curl 은 오류를 보고합니다.
몇 가지 일반적인 포트를 테스트해 보겠습니다.
## 포트 80 (HTTP)이 열려 있는지 테스트
curl -s -o /dev/null -w "%{http_code}\n" http://example.com:80
이 명령은 HTTP 상태 코드 (포트가 열려 있고 서버가 올바르게 응답하는 경우 일반적으로 200) 를 표시합니다. -s 플래그는 Curl 을 silent 로 만들고, -o /dev/null은 출력을 아무 곳으로도 리디렉션하며, -w "%{http_code}\n"은 HTTP 상태 코드만 출력합니다.
몇 개의 포트를 더 시도해 보겠습니다.
## 포트 443 (HTTPS)이 열려 있는지 테스트
curl -s -o /dev/null -w "%{http_code}\n" https://example.com:443
이것은 200 또는 다른 HTTP 상태 코드를 반환하여 포트 443 이 열려 있음을 나타냅니다.
이제 닫혀 있을 가능성이 높은 포트를 테스트해 보겠습니다.
## 포트 81 (일반적이지 않음)이 열려 있는지 테스트
curl -s --connect-timeout 5 http://example.com:81
이 명령은 다음과 같은 오류 메시지와 함께 실패할 가능성이 높습니다.
curl: (7) Failed to connect to example.com port 81: Connection refused
또는 5 초 후에 시간 초과될 수 있습니다 ( --connect-timeout으로 지정됨).
curl: (28) Connection timed out after 5001 milliseconds
FTP 서버 액세스
Curl 은 FTP 를 포함한 여러 프로토콜을 지원합니다. FTP 서버에 액세스하는 방법을 살펴보겠습니다.
curl ftp://ftp.gnu.org/gnu/
이 명령은 ftp.gnu.org 의 디렉토리 내용을 나열합니다. 출력은 다음과 같습니다.
drwxr-xr-x 8 1003 1003 4096 Dec 16 2020 0ad
drwxr-sr-x 5 1003 1003 4096 Nov 09 2020 8sync
drwxr-xr-x 2 1003 1003 4096 Jun 05 2015 GNUinfo
drwxr-xr-x 3 1003 1003 4096 Jan 23 2022 GNUnet
...
간단한 포트 스캐너 만들기
서버에서 포트 범위를 스캔하는 간단한 Bash 스크립트를 만들어 보겠습니다. 프로젝트 디렉토리에 port_scanner.sh라는 새 파일을 만듭니다.
nano ~/project/port_scanner.sh
다음 내용을 파일에 추가합니다.
#!/bin/bash
## Simple port scanner using curl
## Usage: ./port_scanner.sh <hostname> <start_port> <end_port>
hostname=$1
start_port=$2
end_port=$3
echo "Scanning ports $start_port to $end_port on $hostname..."
echo
for port in $(seq $start_port $end_port); do
## Try to connect with a short timeout
curl -s --connect-timeout 1 "$hostname:$port" > /dev/null
## Check if the connection was successful
if [ $? -eq 0 ]; then
echo "Port $port is OPEN"
else
echo "Port $port is closed"
fi
done
echo
echo "Scan complete!"
Ctrl+X, Y, Enter를 눌러 파일을 저장합니다.
스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/port_scanner.sh
이제 스크립트를 실행하여 example.com 에서 포트 80-85 를 스캔합니다.
~/project/port_scanner.sh example.com 80 85
출력은 어떤 포트가 열려 있고 어떤 포트가 닫혀 있는지 보여줍니다.
Scanning ports 80 to 85 on example.com...
Port 80 is OPEN
Port 81 is closed
Port 82 is closed
Port 83 is closed
Port 84 is closed
Port 85 is closed
Scan complete!
이 간단한 스크립트는 Curl 을 기본 포트 스캔 도구로 사용하는 방법을 보여줍니다. 실제 시나리오에서는 보다 포괄적인 네트워크 스캔을 위해 nmap과 같은 특수 도구를 사용하겠지만, 이 예제는 Curl 의 다재다능함을 보여줍니다.