gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:52:48 25 4
gpt4 key购买 nike

您好,我已使用 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,为什么它要求我登录?

此代码未编译,因为它是从我的另一台计算机上存储的,所以如果您发现任何错误,请告诉我,我会立即进行编辑。

最佳答案

我设法弄明白了。

URL.openConnection() 基本上返回一个基于协议(protocol)实现URLStreamHandler 的类。所以在这种情况下,协议(protocol)是 ftp,它返回 FtpURLConnection

因此检查用户名是否为空(未在 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 + "@"));
}

所以我基本上使用匿名无密码登录。

关于java - 没有用户名和密码的FTP连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com