Socks5Proxy

cURL 프록시 사용법, HTTP와 SOCKS5 프록시를 명령줄에서 확인하기

이 가이드는 cURL로 Socks5Proxy의 HTTP 프록시와 SOCKS5 프록시에 연결하는 방법, 아이디·비밀번호 인증, 응답 시간 측정, 목록 전체를 한 번에 확인하는 셸 스크립트를 설명해요.

cURL로 프록시를 시험하면 좋은 이유는 무엇인가요?

cURL은 거의 모든 서버와 개발 환경에 설치되어 있어서 프록시가 제대로 동작하는지 가장 빨리 확인할 수 있는 도구예요. 코드나 브라우저 설정에서 문제가 생겼을 때 cURL로 같은 줄을 시험해 보면 프록시 문제인지 코드 문제인지 바로 나눠 볼 수 있어요.

예시는 IP 198.51.100.23, HTTP 포트 8000, SOCKS5 포트 1080, 아이디 spx_user, 비밀번호 spx_pass를 써요.

HTTP 프록시는 어떻게 연결하나요?

-x(또는 --proxy) 옵션에 프록시 주소를 넣어요. 아이디와 비밀번호는 주소 안에 넣거나 -U 옵션으로 따로 넣을 수 있어요. HTTPS 주소를 요청하면 cURL이 CONNECT로 터널을 만들고 그 안에서 암호화된 채 요청해요.

# user and password inside the proxy URL
curl -x http://spx_user:spx_pass@198.51.100.23:8000 https://api.ipify.org

# or with -U
curl -x http://198.51.100.23:8000 -U spx_user:spx_pass https://api.ipify.org

SOCKS5 프록시는 어떻게 연결하나요?

--socks5-hostname은 도메인 이름 확인을 프록시 쪽에서 해요. 내 서버의 DNS 요청이 밖으로 드러나지 않고, 프록시가 있는 나라 기준으로 이름이 확인돼요. --socks5는 이름 확인을 내 서버에서 한 뒤 IP만 프록시로 보내요. 대부분의 경우 --socks5-hostname을 추천해요.

주소 형식 socks5h://로 -x에 넣어도 같은 결과예요.

# DNS is resolved by the proxy
curl --socks5-hostname 198.51.100.23:1080 --proxy-user spx_user:spx_pass https://api.ipify.org

# same thing with a proxy URL
curl -x socks5h://spx_user:spx_pass@198.51.100.23:1080 https://api.ipify.org

응답 시간과 상태를 함께 보려면 어떻게 하나요?

-w 옵션으로 연결 시간, 첫 바이트까지 걸린 시간, 전체 시간, 응답 코드를 한 줄로 출력할 수 있어요. 여러 나라 프록시의 속도를 비교하거나, 대상 사이트가 느린지 프록시가 느린지 나눠 볼 때 유용해요.

-o /dev/null로 본문을 버리고 -s로 진행 표시를 끄면 결과만 깔끔하게 보여요.

curl -s -o /dev/null \
  -x http://spx_user:spx_pass@198.51.100.23:8000 \
  -w "code=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
  https://example.com/

목록 전체를 한 번에 확인하려면 어떻게 하나요?

API로 목록을 받아 줄마다 cURL을 실행하면 모든 프록시의 상태를 한 번에 확인할 수 있어요. 아래 스크립트는 ip:port:user:pass 형식 목록을 받아 각 줄의 응답 IP와 걸린 시간을 출력해요. 시간 제한을 넣어 응답 없는 줄에서 멈추지 않게 했어요.

#!/bin/sh
KEY="YOUR_API_KEY"
curl -s -H "Authorization: Bearer $KEY" \
  "https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http" > proxies.txt

while IFS=: read -r ip port user pass; do
  out=$(curl -s -m 15 -x "http://$user:$pass@$ip:$port" -w " %{time_total}s" https://api.ipify.org)
  echo "$ip:$port $out"
done < proxies.txt

API 자체도 cURL로 부를 수 있나요?

네. 잔액 확인, 활성 플랜 목록, 프록시 목록 모두 Authorization: Bearer 헤더 하나로 부를 수 있어요. JSON 응답은 jq 같은 도구로 필요한 칸만 골라 볼 수 있어요.

curl -H "Authorization: Bearer YOUR_API_KEY" https://socks5proxy.io/api/v1/account
curl -H "Authorization: Bearer YOUR_API_KEY" "https://socks5proxy.io/api/v1/proxies?country=us&protocol=socks5"

환경 변수로 프록시를 정할 수도 있나요?

네. cURL과 많은 명령줄 도구는 http_proxy, https_proxy, all_proxy 환경 변수를 읽어요. 셸에서 한 번 정해 두면 그 셸에서 실행하는 cURL, wget, pip 같은 도구가 모두 같은 프록시를 써요. SOCKS5는 all_proxy에 socks5h:// 주소를 넣으면 돼요.

프록시를 거치지 않아야 하는 주소는 no_proxy에 쉼표로 적어 두세요. 내부 서버나 localhost까지 프록시로 나가는 일을 막을 수 있어요.

export https_proxy="http://spx_user:spx_pass@198.51.100.23:8000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org

# SOCKS5 for every tool that reads all_proxy
export all_proxy="socks5h://spx_user:spx_pass@198.51.100.23:1080"

HTTP 프록시와 SOCKS5 프록시 결과를 비교하려면 어떻게 하나요?

같은 IP의 두 포트로 같은 주소를 요청해 응답 IP와 시간을 비교하면 내 환경에서 어떤 방식이 더 빠른지 알 수 있어요. 대부분 비슷하지만, 대상 서버가 멀리 있거나 DNS 확인이 느린 환경에서는 차이가 날 수 있어요.

응답 IP는 두 방식 모두 같아야 해요. 다르게 나온다면 다른 줄의 포트를 섞어 쓴 경우이니 목록을 다시 확인해 주세요.

for p in "http://spx_user:spx_pass@198.51.100.23:8000" "socks5h://spx_user:spx_pass@198.51.100.23:1080"; do
  curl -s -m 15 -x "$p" -w "  %{time_total}s\n" https://api.ipify.org
done

서버에서 IP 인증용 IP를 확인하려면 어떻게 하나요?

IP 인증에 등록할 값은 내 서버가 인터넷으로 나갈 때 쓰는 공인 IPv4예요. 프록시 없이 curl -4 https://api.ipify.org를 실행하면 그 값을 바로 확인할 수 있어요. 이 값을 대시보드의 IP 인증 칸에 등록하면 그 서버에서는 아이디와 비밀번호 없이 연결돼요.

curl -4 -s https://api.ipify.org

HTTPS 사이트에서 프록시가 내용을 볼 수 있나요?

HTTP 프록시로 HTTPS 주소를 요청하면 cURL은 먼저 CONNECT로 대상 서버까지 터널을 만들고, 그 안에서 대상 서버와 직접 암호화 연결을 맺어요. 프록시는 어느 서버로 연결하는지만 알고, 오가는 내용은 암호화되어 있어 볼 수 없어요. -v 옵션으로 실행하면 CONNECT 단계와 그 뒤의 암호화 연결 과정이 차례로 보여요.

SOCKS5도 같아요. 프록시는 연결을 그대로 전달하고, 암호화는 cURL과 대상 서버 사이에서 이루어져요. 그래서 인증서 확인 옵션(-k)은 쓰지 않는 것이 안전해요. 프록시를 거쳐도 대상 서버의 인증서가 그대로 확인되기 때문이에요.

--socks5-hostname을 쓰면 접속하려는 도메인 이름도 프록시가 확인해서, 내 서버의 DNS 요청 기록에도 남지 않아요.

curl -v -o /dev/null -x http://spx_user:spx_pass@198.51.100.23:8000 https://example.com/ 2>&1 | grep -E "CONNECT|HTTP/|SSL connection"

cURL 오류 메시지는 어떻게 읽나요?

Received HTTP code 407 from proxy after CONNECT는 인증 실패예요. 아이디와 비밀번호, 또는 IP 인증에 등록한 서버 IP를 확인하세요. 비밀번호에 @나 :가 있으면 주소 안에 넣지 말고 -U나 --proxy-user로 넣어야 해요.

Failed to connect 또는 Connection timed out은 포트가 맞지 않거나 내 서버의 방화벽이 나가는 연결을 막는 경우예요. HTTP 주소에는 HTTP 포트를, SOCKS5에는 SOCKS5 포트를 쓰고, 나가는 방향의 포트가 열려 있는지 확인해 주세요. -v 옵션을 붙이면 연결 과정이 단계별로 보여서 원인을 찾기 쉬워요.

cURL 프록시 사용법, -x와 SOCKS5 연결 확인 | Socks5Proxy