블로그로 돌아가기

프록시가 필요한 프로토콜을 지원하지 않을 때 해결 방법

프록시와 프로토콜 간의 비호환성 원인 분석 및 실질적인 해결 방법: 로컬 변환기 설정부터 올바른 프록시 유형 선택까지.

📅2025년 12월 9일
```html

프록시가 필요한 프로토콜을 지원하지 않을 때 대처 방법

프록시를 설정하고 스크립트를 실행했는데 "Protocol not supported" 또는 "Connection refused" 오류가 발생했나요? 프로토콜 비호환성 문제는 생각보다 자주 발생합니다. 왜 이런 일이 발생하는지, 그리고 프록시 제공업체를 변경하지 않고 이 문제를 어떻게 해결할 수 있는지 살펴보겠습니다.

프록시에서 사용하는 프로토콜

문제를 해결하기 전에 각 프로토콜의 차이점을 이해하는 것이 중요합니다. 각 프로토콜은 고유한 사용 영역과 제한 사항을 가지고 있습니다.

프로토콜 기본 포트 특징
HTTP 80, 8080, 3128 HTTP 트래픽만 지원, 헤더 수정 가능
HTTPS (CONNECT) 443, 8443 HTTP CONNECT를 통한 터널링, 암호화 지원
SOCKS4 1080 TCP 연결만 지원, 인증 없음, UDP 미지원
SOCKS5 1080, 1081 TCP 및 UDP 지원, 인증 지원, 프록시를 통한 DNS

일반적인 충돌 사례:

  • Selenium 및 Puppeteer는 HTTP/HTTPS를 요구하는데 SOCKS5만 있는 경우
  • Telegram 봇은 SOCKS5를 통해 작동하는데 프록시가 HTTP만 지원하는 경우
  • 토렌트 클라이언트는 UDP를 지원하는 SOCKS5를 요구하는데 프록시가 SOCKS4인 경우
  • 게임 애플리케이션이 UDP를 요구하는데 HTTP 프록시가 이를 지원하지 않는 경우

진단: 프록시 프로토콜 확인하기

제공업체가 프로토콜을 명시하지 않았거나 확신이 서지 않는 경우, 직접 프록시를 테스트해 볼 수 있습니다.

curl을 이용한 확인

HTTP 프로토콜 테스트:

# HTTP 프록시
curl -x http://proxy_ip:port http://httpbin.org/ip

# 인증 포함 시
curl -x http://user:pass@proxy_ip:port http://httpbin.org/ip

SOCKS5 테스트:

# SOCKS5 프록시
curl -x socks5://proxy_ip:port http://httpbin.org/ip

# 프록시를 통한 DNS 사용 (socks5h)
curl -x socks5h://proxy_ip:port http://httpbin.org/ip

명령이 프록시의 IP 주소를 반환하면 프로토콜이 올바르게 식별된 것입니다. Connection refused 또는 Unsupported proxy 오류가 발생하면 프로토콜이 일치하지 않는 것입니다.

Python을 이용한 확인

import requests

proxy_ip = "proxy_ip:port"

# HTTP 테스트
try:
    r = requests.get("http://httpbin.org/ip", 
                     proxies={"http": f"http://{proxy_ip}"}, 
                     timeout=10)
    print(f"HTTP 작동: {r.json()}")
except Exception as e:
    print(f"HTTP 작동 안 함: {e}")

# SOCKS5 테스트 (pip install requests[socks] 필요)
try:
    r = requests.get("http://httpbin.org/ip", 
                     proxies={"http": f"socks5://{proxy_ip}"}, 
                     timeout=10)
    print(f"SOCKS5 작동: {r.json()}")
except Exception as e:
    print(f"SOCKS5 작동 안 함: {e}")

자동 감지

프로토콜을 반복하며 테스트하는 스크립트:

import requests

def detect_protocol(proxy_address):
    protocols = ["http", "https", "socks4", "socks5", "socks5h"]
    
    for proto in protocols:
        try:
            proxies = {
                "http": f"{proto}://{proxy_address}",
                "https": f"{proto}://{proxy_address}"
            }
            r = requests.get("http://httpbin.org/ip", 
                           proxies=proxies, timeout=5)
            if r.status_code == 200:
                return proto
        except:
            continue
    return None

result = detect_protocol("proxy_ip:port")
print(f"감지된 프로토콜: {result}")

HTTP를 SOCKS로, 그 반대로 변환하기

프록시가 필요한 프로토콜을 지원하지 않는 경우, 로컬 변환기를 사용하여 프로토콜을 변환할 수 있습니다.

Privoxy: HTTP → SOCKS

Privoxy는 HTTP 요청을 받아 SOCKS 프록시를 통해 전달합니다.

설치:

# Ubuntu/Debian
sudo apt install privoxy

# macOS
brew install privoxy

# Windows — 공식 웹사이트에서 다운로드

설정 (파일 /etc/privoxy/config):

# 로컬 포트 8118에서 수신 (HTTP)
listen-address 127.0.0.1:8118

# 외부 SOCKS5를 통해 전달
forward-socks5 / socks_proxy_ip:1080 .

# 인증 포함 시
forward-socks5 / user:pass@socks_proxy_ip:1080 .

이제 소프트웨어는 127.0.0.1:8118로 HTTP 연결하고, 트래픽은 SOCKS5를 통해 외부로 나갑니다.

Gost: 범용 변환기

Gost는 모든 프로토콜 변환을 위한 강력한 도구입니다.

# 입력: HTTP 프록시 → 출력: SOCKS5
gost -L http://:8080 -F socks5://socks_proxy_ip:1080

# 입력: SOCKS5 → 출력: HTTP
gost -L socks5://:1080 -F http://http_proxy_ip:8080

# 양쪽에 인증 포함 시
gost -L http://local_user:local_pass@:8080 \
     -F socks5://remote_user:remote_pass@proxy_ip:1080

Python 변환기

간단한 작업을 위한 최소한의 Python 변환기:

# pip install pproxy
# 입력: HTTP, 출력: SOCKS5
pproxy -l http://:8080 -r socks5://proxy_ip:1080

# 입력: SOCKS5, 출력: HTTP  
pproxy -l socks5://:1080 -r http://proxy_ip:8080

로컬 터널 설정

때로는 변환만으로는 부족하며 완전한 터널링이 필요할 수 있습니다.

HTTP 프록시를 통한 SSH 터널

SSH 서버와 HTTP 프록시가 있는 경우 SOCKS5를 생성할 수 있습니다.

# HTTP 프록시를 통해 localhost:1080에 SOCKS5 생성
ssh -D 1080 -o ProxyCommand="nc -X connect -x http_proxy:8080 %h %p" user@ssh_server

HTTPS를 위한 Stunnel

HTTPS 프록시가 필요한데 HTTP만 있는 경우:

# stunnel.conf
[https-proxy]
client = yes
accept = 127.0.0.1:8443
connect = http_proxy_ip:8080
protocol = connect
protocolHost = target_host:443

사용 가능한 프로토콜에 맞게 소프트웨어 설정하기

변환하는 것보다 사용 중인 소프트웨어를 사용 가능한 프로토콜에 맞게 설정하는 것이 더 쉬울 때도 있습니다.

다양한 프로토콜을 사용하는 Selenium

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# HTTP 프록시 (표준 방식)
options = Options()
options.add_argument('--proxy-server=http://proxy_ip:8080')

# SOCKS5 프록시
options.add_argument('--proxy-server=socks5://proxy_ip:1080')

# Firefox를 SOCKS5와 함께 사용
from selenium.webdriver.firefox.options import Options as FirefoxOptions
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", "proxy_ip")
profile.set_preference("network.proxy.socks_port", 1080)
profile.set_preference("network.proxy.socks_version", 5)

aiohttp와 SOCKS

# pip install aiohttp-socks
import aiohttp
from aiohttp_socks import ProxyConnector

async def fetch_with_socks():
    connector = ProxyConnector.from_url('socks5://proxy_ip:1080')
    async with aiohttp.ClientSession(connector=connector) as session:
        async with session.get('http://httpbin.org/ip') as response:
            return await response.json()

HTTP를 사용하는 Telegram 봇

Telegram 라이브러리가 SOCKS5를 요구하는데 HTTP만 있는 경우:

# python-telegram-bot에서 HTTP 프록시 사용
from telegram.ext import ApplicationBuilder

application = (
    ApplicationBuilder()
    .token("YOUR_TOKEN")
    .proxy_url("http://proxy_ip:8080")  # HTTP에서 작동
    .build()
)

팁: 많은 최신 라이브러리가 두 프로토콜을 모두 지원합니다. socks5://http://로 변경하는 것만으로 충분할 수 있으니 문서를 확인해 보세요.

필요한 프로토콜을 가진 프록시 선택 방법

프로토콜 문제로 인한 혼란을 피하려면 요구 사항을 미리 파악하는 것이 중요합니다.

호환성 매트릭스

작업 권장 프로토콜 이유
웹 스크래핑 HTTP/HTTPS 광범위한 지원, 간단한 설정
브라우저 자동화 HTTP 또는 SOCKS5 브라우저 및 프레임워크에 따라 다름
Telegram, Discord 봇 SOCKS5 라이브러리 요구 사항
토렌트 UDP 지원 SOCKS5 DHT 및 P2P 통신에 UDP 필요
게임, VoIP UDP 지원 SOCKS5 낮은 지연 시간, UDP 트래픽
API 요청 HTTP/HTTPS REST API는 HTTP를 통해 작동

프록시 제공업체 선택 시 고려 사항

  • 지원되는 프로토콜 목록 — 명시되어 있어야 함
  • 전환 가능성 — 일부 제공업체는 동일 IP에 대해 다른 포트/프로토콜 액세스를 제공함
  • SOCKS5의 UDP 지원 여부 — 모든 SOCKS5 프록시가 UDP를 지원하는 것은 아님
  • 설정 문서 — 다양한 언어 및 도구에 대한 예시 제공 여부

레지덴셜 프록시는 일반적으로 HTTP/HTTPS와 SOCKS5를 동시에 지원하여 대부분의 프로토콜 문제를 해결해 줍니다. 데이터센터 프록시는 HTTP/HTTPS로 제한되는 경우가 많습니다.

구매 전 체크리스트

  1. 사용할 소프트웨어가 요구하는 프로토콜을 확인합니다.
  2. UDP 지원이 필요한지 (게임, 토렌트, VoIP) 확인합니다.
  3. 제공업체에 필요한 프로토콜 지원 여부를 문의합니다.
  4. 호환성 테스트를 위해 테스트 액세스를 요청합니다.
  5. 대안으로 로컬 변환기 계획을 준비합니다.

결론

프로토콜 비호환성은 해결 가능한 문제입니다. 대부분의 경우 Privoxy나 Gost와 같은 로컬 변환기만으로 충분합니다. 장기적인 프로젝트의 경우 필요한 프로토콜을 지원하는 프록시를 처음부터 선택하는 것이 더 효율적입니다.

프로토콜 선택의 유연성이 필요한 작업에는 멀티 프로토콜 액세스를 지원하는 레지덴셜 프록시가 적합합니다. 자세한 내용은 proxycove.com에서 확인하세요.

```