Node의 socks 패키지는 UDP를 위해 SocksClient 인스턴스를 command: 'associate'와 함께 사용합니다. 편리한 SocksClient.createConnection() 팩토리는 대신 TCP CONNECT를 처리합니다.

프로젝트의 연결 예제는 SOCKS 클라이언트를 별도의 로컬 UDP 소켓과 결합합니다:

  1. UDP ASSOCIATE를 설정하고 그 TCP 제어 연결을 유지합니다.
  2. 서버가 반환하는 릴레이 호스트와 포트를 읽습니다.
  3. createUDPFrame()를 사용해 나가는 페이로드를 목적지 주소와 함께 프레이밍합니다.
  4. 데이터그램을 릴레이로 보낸 다음, 페이로드를 애플리케이션에 전달하기 전에 들어오는 릴레이 프레임에 parseUDPFrame()를 사용합니다.

Node의 dgram 소켓은 UDP 전송을 제공하지만 SOCKS URL을 해석하지 않습니다. 연결과 프레이밍이 그 데이터그램 주위에 프록시 프로토콜을 제공합니다.

서버는 UDP를 지원해야 하고 릴레이 엔드포인트에 도달할 수 있어야 합니다. 초기 프록시 포트로의 성공적인 TCP 연결은 그 경로를 검증하지 않습니다. 연결이 더 이상 필요 없으면 제어 및 UDP 리소스를 닫습니다.

관련 글