FTP连接没有用户名和密码?

时间:2016-07-15 13:30:56

标签: java sockets ftp

您好我已使用URLConnection连接到FTP,只使用了IP地址但没有指定登录凭据。

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没有登录,为什么要求我登录?

此代码未编译,因为它是从我的其他计算机中存储的,所以如果您发现错误并让我立即编辑,请告诉我。

1 个答案:

答案 0 :(得分:4)

我设法搞清楚了。

URL.openConnection()基本上返回一个基于协议实现URLStreamHandler的类。因此,在这种情况下,协议为ftp,并返回FtpURLConnection

所以检查一下,如果用户名为null(未在URL中指定),如果是,则将其设置为匿名并使用带有@的

的java版本的密码

例如Java1.8.0@不确定用于登录历史的目的。 但是你可以使用任何密码来匿名登录,除非它为我认为的其他东西配置。

        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无密码登录。