gpt4 book ai didi

perl - 在 FTP 客户端套接字程序中获取连接被拒绝

转载 作者:行者123 更新时间:2023-12-03 11:56:58 24 4
gpt4 key购买 nike

我有这个 Perl 脚本,我想在其中获取 FTP 服务器的列表。
我的理解是 FTP 服务器打开一个新的连接回到
客户端托管在某个随机端口上以发送数据。我应该以某种方式创造
一个新的套接字并从中读取?我不知道如何使它工作。

#!/usr/bin/perl

use warnings;
use 5.30.0;
use IO::Socket;

my $socket = IO::Socket::INET->new("core9:21");

$socket->send("USER user7\r\n", 0);
$socket->send("PASS s$cret\r\n", 0);
#$socket->send("SYST\r\n", 0);
#$socket->send("HELP\r\n", 0);
#$socket->send("TYPE A\r\n", 0);
$socket->send("PORT 192,168,0,20,200,95\r\n", 0);
$socket->send("LIST\r\n", 0);
$socket->send("QUIT\r\n", 0);

while (my $line = <$socket>) {
print($line);
}

$socket->close();

最佳答案

您正在使用 PORT命令,它告诉 FTP 服务器与您指定的 IP:Port 建立新连接。所以是的,当然,在服务器可以连接到它之前,您必须在该 IP:Port 上实际创建自己的第二个监听套接字。
否则,请使用 PASV而是使用命令(无论如何你都应该这样做,因为它对在 NAT 路由器后面运行的客户端更友好),它告诉 FTP 服务器在其一侧打开一个监听端口,然后您可以将第二个套接字连接到该端口。 FTP 服务器会告诉您需要连接的 IP:端口。
此外,您的代码甚至无法成为有效的 FTP 客户端,因为您没有阅读甚至查看服务器的响应以了解您的命令是成功还是失败。您甚至没有阅读服务器的初始问候语,就知道您是否被允许向它发送命令。
我强烈建议您阅读官方 FTP 协议(protocol)规范,RFC 959 .

关于perl - 在 FTP 客户端套接字程序中获取连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66248625/

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