2016-07-15 4 views
2

안녕하세요. URLConnection을 사용하여 FTP에 연결했으며 로그인 자격 증명을 지정하지 않고 IP 주소 만 사용했습니다.FTP는 사용자 이름과 암호없이 연결합니까?

URLConnection conn = new URLConnection(new URL("ftp://222.101.102.1/etc")); 

서버가 익명 연결을 허용하기 때문에 자격 증명없이 작동합니다.

는하지만 연습 나는 Socket 고객과 처음부터 FTP 연결을 원했고, 그 IP에 대한 새로운 소켓 연결 생성 :

Socket socket = new Socket("222.101.102.1", 21); 
if (socket != null) { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    String version = reader.readLine(); 
    System.out.println(version); 
} 

220 vsFTPd (2.0.5)

를 인쇄하지만를 내가하려고 할 때 LS \r\n

내가 얻을 같은 명령을 530 Please login with USER and PASS

URLConnection으로 로그인하지 않은 이유는 무엇입니까?

이 코드는 다른 컴퓨터에서 기억되기 때문에 컴파일되지 않았으므로 잘못된 정보를 발견하면 즉시 알려 주시면됩니다.

+0

IIRC, 소켓을 빌드 할 때 프로토콜을 중심으로 전체 작동을 구축하지만 프로토콜을 통해 통신하는 방법을 설정해야합니다. URLConnection 객체를 구축하면 이미 해당 동작이 내장 된 객체가 생성됩니다. 즉, URLConnection은 연결 및 로그인하는 방법을 알고 있지만 소켓에서는 실제로 연결하는 방법 만 알고 있습니다. 그것은 다음에해야할 일을 알지 못합니다. –

+0

@blahfunk 정확히 내가 필요로하는 것! URLConnection이 수행하는 방법에 대한 정보가 필요합니다. 기본 연결 자격 증명으로 사용하는 정보는 어디에서 얻을 수 있습니까? 사람들은 username이 익명이거나 ftp와 password가 이메일이라고 말합니다. 그러나 나는 알고있는 이메일을 사용하지 않습니다. – Jony

답변

3

나는 그것을 알아낼 수 있었다.

URL.openConnection()은 기본적으로 프로토콜을 기반으로 URLStreamHandler을 구현하는 클래스를 반환합니다. 따라서이 경우 프로토콜은 ftp이며 FtpURLConnection을 반환합니다.

그래서 거기에 사용자 이름이 null의 경우 (URL에 지정되지 않음)하는 검사이며, 그렇게하는 경우는 @

예를 들어 [email protected]하지과 자바 버전의 암호를 익명으로 설정하고 사용 무슨 목적으로, 어쩌면 로그인 기록을 위해. 하지만 익명으로 로그인하려면 아무 암호 나 사용할 수 있습니다. 다른 암호로 구성되어 있지 않은 경우입니다.

 if(this.user == null) { 
      this.user = "anonymous"; 
      String var11 = (String)AccessController.doPrivileged(new GetPropertyAction("java.version")); 
      this.password = (String)AccessController.doPrivileged(new GetPropertyAction("ftp.protocol.user", "Java" + var11 + "@")); 
     } 

그래서 나는 기본적으로 Anonymous암호없이를 사용하여 로그인.

관련 문제