SOCKS를 통한 Ruby Net::FTP: 로그인은 되지만 다운로드가 멈춥니다
Ruby FTP의 제어 및 데이터 연결을 동일한 의도된 프록시 경로로 추적합니다.
FTP 로그인은 제어 연결을 사용합니다. 그다음 디렉터리 목록이나 다운로드에는 데이터 연결이 필요하며, SOCKS를 통한 로그인이 성공했더라도 실패할 수 있습니다.
먼저 패시브 모드인지 액티브 모드인지 확인합니다. 패시브 모드에서는 클라이언트가 FTP 서버가 알려 준 주소와 포트로 새 연결을 엽니다. 그 연결에도 의도된 프록시 경로가 필요합니다.
Ruby 소켓 통합
Ruby의 Net::FTP API는 연결 및 패시브 모드 동작을 문서화합니다. SOCKS 통합은 제어 경로와 데이터 경로가 모두 사용하는 소켓 생성을 다뤄야 합니다. 다른 곳의 HTTP 클라이언트 프록시 설정으로는 그것들이 구성되지 않습니다.
통합이 소켓 동작을 전역으로 바꾼다면 스레드에 대한 범위를 검토하세요. 한 번의 전송을 감싼 블록은 다른 스레드를 공유 상태 변경으로부터 격리할 수 없습니다.
공급자는 정적 엔드포인트를 제공할 수 있지만, 이는 서비스 기능이지 SOCKS의 일반 요구 사항이 아닙니다. 별도 연결이 서로 다른 출구를 쓸 수 있는 경우, FTP 서버가 데이터 연결을 인증된 제어 연결과 어떻게 연결하는지 확인하세요.
자격 증명을 제거한 채 도달한 단계, 모드, 데이터 엔드포인트를 기록하세요. 이렇게 하면 차단된 데이터 경로와 프록시 로그인 실패를 구분할 수 있습니다.