在java中连接到ftp端口990时“连接被拒绝”

1mrurvl1  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(818)

我制作了一个ftps客户端阵列,并尝试将其连接到我感兴趣的ip端口。这是密码。

public class ftptest 
{   
    public static void delete_files(String path, int n) throws IOException
    {
        String realpath;
        for(int i=0 ; i<n ; i++)
        {
            realpath = path+i;
            File file = new File(realpath);
            FileUtils.cleanDirectory(file);
        }
    }

    public static void main(String[] args) throws Exception
    {
        int number = 1;
        String ip = "some_ip";
        int port = 990;

        FTPSClient[] client = new FTPSClient[number];

        System.out.println(ip);
        System.out.println("port = "+ port);

        for(int i = 0; i < number; i++)
        {
            String path = "D:\\ftptest\\client"+i;          
            File file = new File(path);
            file.mkdir();       

            client[i] = new FTPSClient(true);   
            client[i].setRemoteVerificationEnabled(false);
            client[i].setTrustManager
            (TrustManagerUtils.getAcceptAllTrustManager());         

            client[i].enterLocalPassiveMode();

            client[i].setControlEncoding("UTF-8");
            client[i].connect(ip,port);

            System.out.println("Connected to " + ip + ".");
        }   
    }
}

但不知怎的,它失败了 client[i].connect(ip, port) 放弃错误
线程“main”java.net.connectexception中出现异常:连接被拒绝:>connect at java.net.dualstackplainsocketimpl.connect0(本机方法)at java.net.dualstackplainsocketimpl.socketconnect(未知源)at java.net.abstractplainsocketimpl.doconnect(未知源)at java.net.abstractplainsocketimpl.connecttoaddress(未知源)java.net.abstractplainsocketimpl.connect(未知源),java.net.plainsocketimpl.connect(未知源),java.net.socksocketImpl.connect(未知源),java.net.socket.connect(未知源),org.apache.commons.net.socketclient.connect(socketclient)。java:182)在org.apache.commons.net.socketclient.connect(socketclient。java:203)在org.apache.commons.net.socketclient.connect(socketclient。java:296)在com.samsung.ftptest.ftptest.main(ftptest。java:66)
当它是ftp而不是ftps时,它工作正常。有人知道它为什么不起作用吗?
谢谢您。

gkl3eglg

gkl3eglg1#

运行此操作的系统无法连接到服务器计算机上的端口990。出现这种情况的原因有很多,包括:
服务器没有监听端口990
防火墙正在阻止端口990
您应该做的第一件事是找到一个使用ftps成功连接到此服务器的客户端,并检查其配置:
它配置为使用什么端口?
是否使用:
明确的ftps(这是首选的、符合标准的ftps方式。它在端口21上以普通ftp连接,然后协商到一个安全协议。
隐式ftps(这种方法从来都不是标准,但在野外确实存在。像https一样,使用不同的端口(通常是990),ssl握手在连接后立即发生)
一旦你了解了这些,你就可以在你的代码中使用正确的端口和模式。
如果你确定这个端口,并且它可以在其他机器上工作,那么防火墙就是罪魁祸首。使用telnet演示您无法连接:

unixprompt$ telnet serverhostname 990

如果它挂起,或者说“连接被拒绝”,你就知道这台机器无法连接到它。如果你得到“连接到…”你知道至少你有tcp连接(然后 ctrl-] quit 出去)。
如果你发现这是一个防火墙,准备战斗。你正在与控制连接作斗争--数据连接是一场全新的战斗。为被动模式显式FTP打开防火墙相当简单,并记录在ietf草案中:https://tools.ietf.org/html/draft-fordh-ftp-ssl-firewall-00 --但众所周知,防火墙管理员不愿意这么做。

ijxebb2r

ijxebb2r2#

服务器可能不支持(不推荐使用的)隐式ftps模式。
无论如何,您最好使用显式模式:

client[i] = new FTPSClient();   
// ...
client[i].connect(ip, 21);

(假设服务器完全支持通过tls/ssl的ftp)

相关问题