我有这个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:Port。
同样,您的代码甚至远不是一个有效的FTP客户端,因为您没有阅读甚至没有查看服务器的响应来知道您的命令是成功还是失败。您甚至都没有阅读服务器的初始问候来知道是否甚至可以向其发送命令。
我强烈建议您阅读官方的FTP协议规范RFC 959。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句