#!/usr/bin/perl -w # Usage: # list.pl host:user:pass # # sub POE::Component::Client::FTP::DEBUG () { 1 }; # sub POE::Kernel::TRACE_EVENTS () { 1 } use strict; use POE; use POE::Component::Client::FTP; use POE::Filter::Ls; use Data::Dumper; $|++; my ($conn, $file) = @ARGV; my ($host,$user,$pass) = split /:/, $conn; POE::Session->create ( inline_states => { _start => \&start, connected => \&connected, authenticated => \&authenticated, login_error => \&login_error, ls_data => \&ls_data, ls_done => \&ls_done } ); sub start { my $ftp = POE::Component::Client::FTP->spawn ( Alias => 'ftp', RemoteAddr => $host, Username => "wrong", Password => "wrong", ConnectionMode => FTP_PASSIVE, Filters => { ls => new POE::Filter::Ls }, Events => [qw(all)] ); } sub connected { print "Connected: '$_[ARG0]' '$_[ARG1]'\n"; } sub authenticated { $poe_kernel->post('ftp', 'type', 'I'); $poe_kernel->post('ftp', 'ls'); } sub login_error { print "Error logging in: '$_[ARG0]' '$_[ARG1]'\n"; $poe_kernel->post('ftp', 'login', $user, $pass); } sub ls_data { print Dumper $_[ARG0]; } sub ls_done { $poe_kernel->post('ftp', 'quit'); } $poe_kernel->run();