1 |
dpavlin |
1.1 |
#!/usr/bin/perl |
2 |
|
|
# |
3 |
|
|
# Use try to connect to a FTP server using Net::FTP, login as |
4 |
|
|
# anonymous and issue PWD. |
5 |
|
|
# |
6 |
dpavlin |
1.2 |
# Since anonymous ftp servers can be quite busy I suggest that you |
7 |
|
|
# enter more than one anonymous ftp server and use option -o. That will |
8 |
|
|
# return success if ANY OF SERVERS are available -- that way you can |
9 |
|
|
# test if you can connect to ANY ftp server outside. |
10 |
|
|
# |
11 |
dpavlin |
1.1 |
# For use with "mon". |
12 |
|
|
# |
13 |
dpavlin |
1.2 |
# Arguments are "[-p port] [-t timeout] [-o] host [host...]" |
14 |
dpavlin |
1.1 |
# |
15 |
|
|
# 2002-09-02 Dobrica Pavlinusic <dpavlin@rot13.org> |
16 |
|
|
# |
17 |
|
|
|
18 |
|
|
use Getopt::Std; |
19 |
|
|
use Net::FTP; |
20 |
|
|
|
21 |
dpavlin |
1.2 |
getopts ("p:t:o"); |
22 |
dpavlin |
1.1 |
$PORT = $opt_p || 21; |
23 |
|
|
$TIMEOUT = $opt_t || 30; |
24 |
|
|
|
25 |
|
|
my %bad; |
26 |
|
|
|
27 |
|
|
foreach my $host (@ARGV) { |
28 |
|
|
|
29 |
|
|
my $result = check_anon_ftp($host); |
30 |
|
|
if ($result) { |
31 |
|
|
$bad{$host} = $result; |
32 |
dpavlin |
1.2 |
} else { |
33 |
|
|
$good{$host} = "ok"; |
34 |
dpavlin |
1.1 |
} |
35 |
|
|
} |
36 |
|
|
|
37 |
|
|
if (keys %bad == 0) { |
38 |
|
|
exit 0; |
39 |
|
|
} |
40 |
|
|
|
41 |
|
|
print join (" ", sort keys %bad), "\n"; |
42 |
|
|
|
43 |
|
|
foreach my $h (keys %bad) { |
44 |
|
|
print "HOST $h: " . $bad{$h}, "\n"; |
45 |
dpavlin |
1.2 |
} |
46 |
|
|
|
47 |
|
|
if ($opt_o && keys %good > 0) { |
48 |
|
|
# one host is o.k., don't report warning |
49 |
|
|
exit 0; |
50 |
dpavlin |
1.1 |
} |
51 |
|
|
|
52 |
|
|
exit 1; |
53 |
|
|
|
54 |
|
|
sub check_anon_ftp { |
55 |
|
|
my ($host) = @_; |
56 |
|
|
$ftp = Net::FTP->new($host, Debug => 0, Timeout => $TIMEOUT, Port => $PORT) || return "can't connect to $host:$PORT for $TIMEOUT seconds."; |
57 |
|
|
$ftp->login("anonymous",'mon@kernel.org') || return "$host: can't login as anonymous"; |
58 |
|
|
my $dir = $ftp->pwd || return "$host: can't do PWD"; |
59 |
|
|
$ftp->quit; |
60 |
|
|
return 0; |
61 |
|
|
} |
62 |
|
|
|