EPSV도 FTP 데이터 연결을 별도로 연다. 바뀌는 것은 엔드포인트 정보이지 연결 개수가 아니다.

전통적인 PASV 응답은 주소와 포트를 준다. 그 주소는 서버 네트워크 밖에서 쓸 수 없을 수 있다. EPSV는 포트를 주고 제어 연결에 연결된 서버 주소를 사용한다.

프록시를 통과할 때는 FTP 서버의 논리적 정체성을 유지한다. 중간 장비의 수신 주소가 반환된 데이터 포트를 소유한 서버인 것은 아니다.

데이터 연결에는 의도한 프록시 경로와 선택한 포트에 도달할 권한도 필요하다. FTP 제어 포트에 대한 CONNECT를 받아들였다고 해서 이후의 모든 데이터 연결이 허용되지는 않는다.

EPSV를 끄기 전에 수동 응답과 전송을 위해 요청된 서버 주소 및 포트를 확인한다. FTP 로그인 성공은 제어 연결을 세울 뿐이고 데이터 연결은 확인할 대상으로 남는다. Python ftplib에서는 PySocks 기본값만 믿지 말고 두 소켓 생성자를 모두 추적한다.

관련 글