2014-06-13 1 views
5

Windows 서비스를 FTP 사이트에 연결하는 데 문제가 있습니다.원격 서버에서 오류를 반환했습니다. 227 수동 모드 시작 (500 oops vs_utility_recv_peek : 데이터 없음)

다른 개발자의 Windows 서비스를 상속 받았습니다. 이 서비스는 타사 서버에 연결하고 csv 파일을 다운로드 한 다음 처리합니다. 어떤 이유로, 서비스가 작동을 멈췄습니다 (1 년 전, 프로젝트를 받기 전).

그래서 기본으로 돌아가 콘솔 앱을 만들고 해당 앱에서만 연결/파일 다운로드 기능을 시도했습니다. 나는 FTP에 연결하기 위해 다양한 방법을 시도하지만, 그들 모두가 내 응용 프로그램에 동일한 오류를 반환 :

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftpaddress/filename.csv"); 
     request.Method = WebRequestMethods.Ftp.DownloadFile; 

     request.Credentials = new NetworkCredential("username", "password"); 

     request.UsePassive = true; 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

     Stream responseStream = response.GetResponseStream(); 
     StreamReader reader = new StreamReader(responseStream); 
     Console.WriteLine(reader.ReadToEnd()); 

     Console.WriteLine("Download Complete, status {0}", response.StatusDescription); 

     reader.Close(); 
     response.Close(); 

:

The remote server returned an error: 227 Entering Passive Mode()

이 내가 해봤 많은 방법 중 하나입니다

FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

내가 거짓 수정에 이러한 오류를 UsePassive 속성을 설정하는 여러 포럼에서 읽을 수 있지만 내게 일어난 모든 것을 내가 대신 아래 구문 오류가 발생했습니다이었다 :하지만이 부분에 아래로 떨어지면 :

The remote server returned an error: (500) Syntax error, command unrecognized.

파일은 제 3 자 FTP 서버에서 호스팅됩니다. 제어 할 권한이 없습니다. URL을 브라우저에 붙여 넣을 수 있으며 사용자 이름과 암호를 입력하라는 메시지가 표시됩니다. 그러면 사용자 이름과 암호를 통해 파일을 다운로드 할 수 있습니다.

방화벽을 문제의 원인으로 제거하기 위해 내부 네트워크와 방화벽 (방화벽 뒤의 것은 아님) 모두에서 앱을 실행 했으므로 아무런 차이가 없습니다. 또한 FileZilla를 통해 Default, Active 및 Passive 모드로 연결되었으며 매번 작동했습니다. 그래서 문제 없습니다.

그래서 Wireshark를 실행했습니다. 여기에 수동 모드에서는 Filezilla (즉, 성공적인)를 사용하여 와이어 캡처 이미지입니다 :

enter image description here

는 그리고 여기 true로 수동 설정과 응용 프로그램을 사용하여 연결 (그리고 실패) 캡처이며, : 위의 실패한 연결에 볼 수

enter image description here

그래서, 난 잘 서버에 로그인 할 수 있습니다. 그런 다음 어떤 이유로 든 "TYPE I"이라는 추가 요청이 전송됩니다.이 경우 "이진 모드로 전환"응답이 표시됩니다. 그 아래, 나는 다음과 같은 얻을 :

500 oops: vsf_sysutil_recv_peek: no data

은 또한, 나 또한 다시 false로 수동 속성을 설정 한 후 그것을 실행을, 이것은 내가 그 시간 무엇을 가지고 있습니다 :

enter image description here

을 그래서 제 질문은 두 가지입니다.

1, 어떻게 든 UsePassive 문제를 지나치고 그 속성을 false로 설정하면 문제가 해결 될까요?

2, UsePassive 속성을 무시하고 앱에서 파일을 다운로드 할 수없는 이유는 무엇입니까?

+0

예, UsePassive = false를 사용하면 아무 것도 사라집니다. 2xx 코드는 ** 오류가 아닙니다 ** 그래서 .NET 코드의 버그 일 것입니다 (오류는 다른 것이지만 마지막으로 실행 된 작업을보고합니다). –

+0

응답 해 주셔서 감사합니다. 나는 227이 에러 코드가 아니라는 것을 안다. 그래서 .NET 어플리케이션이 서버로부터의 마지막 성공적인 응답이었던 것으로 가정한다. 내 .net 코드가 맨 위에 있습니다. 뭐가 잘못되어 너 한테 뛰어 내리는거야? 나는 오늘 여러 가지 방법을 시도했지만, 모두 똑같은 일을합니다. – odinel

+0

아니, 아무것도 잘못된 것 같지만 (usePassive와 함께 또는없이 request.UseBinary = true를 추가하려고합니다.) 서버 오류 (또는 TCP 연결을 설정할 때 방화벽 때문에 클라이언트 오류가있는 것 같습니다) –

답변

10

이제 문제가 해결되었습니다. 그것은 연결을 차단하고 있던 카스퍼 스키의 내장 방화벽으로 밝혀졌습니다. 연결을 시도 할 때 경고 메시지를 표시하지 않았지만 내 PC가 안전하다는 것을 안심하게하는 것은 귀찮은 일입니다.

단서가 227 반환의 세부 사항에 있었다 : 구글 등을 통해이 도달 한 사람을 위해,

10051 – A socket operation was attempted to an unreachable network

또한, 원격 서버 내가지고 있었다 이유입니다 만 수동 연결을 허용하도록 구성되었다 500 구문 오류. 파일을 다운로드 할 때 Wire 캡처를 공부하면 Active가 선택되었지만 실패 할 경우 Filezilla가 실제로 수동 모드로 자동 복귀한다는 사실이 밝혀졌습니다.

내 원래 게시물의 코드가 올바르게 작동합니다.

+0

그래서 카스 퍼 스키와 함께해야합니까? –

+0

동일한 문제가 있었지만 카스퍼 스키가 아니 었습니다. IIS 8.5였습니다. 문제를 해결하려면 여기를 사용하여 FTP 서비스를 다시 시작해야했습니다. http://serverfault.com/questions/309964/why-doesnt-iis-7-5-ftp-respect-the-passive-port-range- for-plain-ftp – LandonC

관련 문제