我试图通过FTP站点代理访问FTP服务器以绕过使用it.sauronsoftware.ftp4j.FTPClient
的防火墙,我知道我的用户名/密码是正确的,因为我可以使用FileZilla连接。我试过用Authenticator
,但没有用。代码:
import java.net.Authenticator;
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.connectors.FTPProxyConnector;
...
FTPClient client = new FTPClient();
FTPProxyConnector connector = new FTPProxyConnector(String "proxyHost", int proxyPort);
client.setConnector(connector);
Authenticator.setDefault(new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("proxyUser", "proxyPass".toCharArray());
}});
System.setProperty("ftp.proxyHost", "proxyHost");
System.setProperty("ftp.proxyPort", "proxyPort");
System.setProperty("ftp.proxyUser", "proxyUser");
System.setProperty("ftp.proxyPass", "proxyPass");
System.out.println("Proxy Accessed");
client.connect("ftpHost");
client.login("ftpUser", "ftpPass");
给我这个错误:java.io.IOException: Proxy authentication failed
我尝试过的事情:
- 使用备用构造器
(String, int, String, String)
。 - 移除
Authenticator
- 只使用
Authenticator
,没有FTPProxyConnector - 设置连接器之前进行身份验证,反之亦然。
然而,当我只是使用验证器时,我得到一个不同的错误说Connection timed out
。
两个错误都出现在client.connect("ftpHost");
行
任何帮助将不胜感激。
注意:FTP代理连接器
编辑:我发现代理被用来绕过防火墙-1检查点——如果这有帮助的话。
检查密码属性名。它的名字是ftp。
ftp.proxyPassSystem.setProperty("ftp.proxyUser", "proxyUser");
System.setProperty("ftp.proxyPassword", "proxyPass");
尝试一下,让我们知道你的结果!
检查密码属性名。它的名字是ftp。
ftp.proxyPassSystem.setProperty("ftp.proxyUser", "proxyUser");
System.setProperty("ftp.proxyPassword", "proxyPass");
尝试一下,让我们知道你的结果!
我找到解决办法了…
我发现FTP客户端使用不同的响应代码进行响应:
200-User <username> authenticated by FireWall-1 authentication
在FTPProxyConnector
的源代码中,除常规
230-Connected to server. Logging in...
将抛出错误。
我必须为FTPProxyConnector
反编译类文件,然后修改源代码,然后重新编译并将其保存回jar。