시도하고 간략하게 간다사용자 지정 FTP 클라이언트 PASV 데이터 연결이 거부되었습니다.
나는 C# .net 3.5를 사용하여 사용자 지정 FTP 구현을 작성했습니다. 시스템은 연결 관리를 위해 TcpClient (활성 모드의 경우 TcpListener)를 사용합니다. 단일 인스턴스에서 이상한 동작이 발생하고 가능한 원인을 묻습니다.
클라이언트 자체가 훌륭하게 작동하며 고객의 상당수가 만족합니다. 그러나, 우리는 내가 알 수없는 것을 가지고있다. 나는 주변에 찌르 기 위해 wireshark 흔적을 보냈지 만 진정한 기쁨은 없습니다. 클라이언트 컴퓨터는 내가 (클라이언트 설명을 통해) 큰 네트워크 인프라라고 믿는 것 뒤에 있습니다. 네트워크 외부에서 동일한 서버에 대한 연결은 매력처럼 작동합니다. 여기 내가보고있는 것이 있습니다.
내 클라이언트가 수동 모드에서 작동하면 데이터 연결 (서버가 수동 모드로 전환되고 포트를 지정 함)에 대해 TCP 핸드 셰이크 요청이 전송되지만 결코 인식되지 않습니다. 이로 인해 재 시도 및 최종 시간 초과가 발생합니다.
Filezilla (및 Windows 탐색기 및 IE ...) 클라이언트에서 수동 모드를 사용하면 연결이 문제없이 진행됩니다. 고의로 클라이언트와 상사가 코드를 가리키게합니다.
wireshark 추적을 통해가는 TCP 프레임 사이의 차이점을 볼 수 없습니다. 모든 제어 연결은 포트 21에 도달하고 두 시나리오에서 확인 응답을받습니다. 깃발은 유사하다. 이 경우에는 높은 번호의 포트 52000+ (그러나 내가 가진 흔적에는 동일하지 않습니다)을 제외하고 데이터 연결에도 동일하게 적용됩니다.
우리는 더 낮은 수준의 프로토콜 문제에 직면 할 때 네트워크 프로그래밍 전문가가 아니며 더 큰 네트워크주의 사항에 대한 이해는 매우 제한적입니다. 개발자로서 나는 즉시 "FIREWALL ISSUE"라고 울부 짖는다. 그러나 그것은 누군가를 위해 아무 것도 해결하지 못한다.
마무리하려면 어떤 종류의 하드웨어/방화벽이 이러한 종류의 동작을 일으킬 수 있는지 알고 있습니까? 나는 응용 프로그램 수준에서 트래픽을 차단하는 것이 의심 스럽지만 결코 알지 못합니다.
읽어 주셔서 감사합니다.
다음과 같은 질문을 던집니다 : 왜 이미 FTP가있을 때 자신의 FTP 구현을 작성 했습니까? –
좋은 질문입니다, 2 가지 이유.1 : 일반적으로, 부서는 제 3 자 라이브러리를 싫어합니다 (Microsoft의 FtpWebRequest는 쓰레기입니다). 둘째, 고객 피드백에 프록시 지원을 포함시킬 수있는 유연성이 필요했습니다. – Gusdor