Beefy Boxes and Bandwidth Generously Provided by pair Networks RobOMonk
There's more than one way to do things
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??
Good day,

I have a script here at work that logs into a ftps server and downloads some files (if there are new files to download). It's currently in production, however it lives on two different servers (thus two different installs). The script is called by a windows scheduled tast (the task part is working).

It's running on straberry perl and both servers are running Windows 2008 R2. The script runs fine on ClientA, but fails on ClientB. I have checked over all the modules that the script needs to run in my perl installs and their versions (the modules versions match up).

It should be also noted that the script works just fine (with both sets of credentials) on my development envrionment (ubuntu).

The log output of the script on ClientB is as follows:

Net-FTPSSL Version: 0.22

Perl: 5.016001 5.16.1, OS: MSWin32

Server (port): xxx.xxx.xxx (21)

Keys: (Debug), (Encryption), (Port)
Values: (1), (E), (21)

SKT <<< 220 RBCNG FTPS (Version Fri Sep 28 11:52:44 2012) server ready.
SKT >>> AUTH TLS
SKT <<< 234 Enabling TLS, awaiting negotiations.
Cannot connect to ftpssl.rbc.com: SSL connect attempt failed because of handshake problems error:00000000:lib(0):func(0):reason(0) at rbc_ftp.pl line 63.

An example of the log when the script runs fine:

Net-FTPSSL Version: 0.22

Perl: 5.016001 5.16.1, OS: MSWin32

Server (port): xxxx.xxxx.xxx (21)

Keys: (Debug), (Encryption), (Port)
Values: (1), (E), (21)

SKT <<< 220 RBCNG FTPS (Version Thu Sep 27 07:35:42 2012) server ready.
SKT >>> AUTH TLS
SKT <<< 234 Enabling TLS, awaiting negotiations.
>>> USER +++++++
<<< 331 Password required for <++++++>.
>>> PASS *******
<<< 230 User <++++++> logged in.
>>> CWD outbound/AAPA/
<<< 250 CWD Command successful.
>>> PBSZ 0
<<< 200 PBSZ Command successful.
>>> PROT P
<<< 200 PROT Command successful.
>>> PASV
<<< 227 Entering Passive Mode ()
--- Host (xxx.xxx.xxx.xxx) Port (6103)
>>> NLST
<<< 150 Opening data connection for '/bin/ls'.
<<< 226 Transfer complete.
>>> TYPE I
<<< 200 Type set to I
2012-9-27 : Found File (Seen It Already): RPT0900P.184.downloaded%WFT
2012-9-27 : Found File (Seen It Already): RPT0900P.185.downloaded%WFT
2012-9-27 : Found File (Seen It Already): RPT0900P.186.downloaded%FTPS
2012-9-27 : Found File (Seen It Already): RPT0900P.187.downloaded%FTPS
2012-9-27 : Found File (Seen It Already): RPT0900P.188.downloaded%FTPS
2012-9-27 : Found File (Seen It Already): RPT0900P.189.downloaded%FTPS
2012-9-27 : Found File (Seen It Already): RPT0900P.190.downloaded%FTPS
2012-9-27 : Found File (Seen It Already): RPT0900P.191.downloaded%FTPS
2012-9-27 : Found File (Seen It Already): RPT0900P.192.downloaded%FTPS
2012-9-27 : Found File (Seen It Already): RPT0900P.193.downloaded%FTPS
2012-9-27 : Found File (Seen It Already): RPT0900P.194.downloaded%FTPS
>>> QUIT
<<< 221 Goodbye.

Here's the code for the script:

###################################################################### +########################### ## Purpose: This script logs into the rbc ftp server and downloads dat +a files, then moves them ## ## to a shared folder so that they can be synced with the qui +ckbooks data. ## ## Author: Nick Peters ## ## Pre: Needs a couple of arguments at run time: + ## ## 1) What batch we want t +o run: ns (netset) or ## ## inl (inetlink). + ## ## 2) The Working Director +y we want to save the ## ## downloaded content t +oo. ## ## 3) The location of a config file containi +ng ## ## hashed user name and + passwords for the ## ## different batch runs +. ## ###################################################################### +########################### use warnings; use strict; use Net::FTPSSL; use Crypt::CBC; use Email::Send; use Email::Simple::Creator; my($day, $month, $year)=(localtime)[3,4,5]; $month = $month + 1; $year = $year + 1900; my $date = "$year-$month-$day"; my $log_name = "rbc_ftp_log_$date.log"; open (STDERR, ">>", $log_name); my $num_args = $#ARGV + 1; if ($num_args == 3) { my $batch = $ARGV[0]; my $work_dir = $ARGV[1]; my $config = $ARGV[2]; #time to read in the config file: open(CONFIG, "<$config") or die "Error Opening Config File!!!\n"; my @config_lines = <CONFIG>; close(CONFIG); my $cipher = Crypt::CBC->new( -key => 'xxxxxxxx', -cipher => 'Blow +fish',); my $user; my $pass; if ($batch eq "ns") { #we are doing a netset batch. $user = $cipher->decrypt($config_lines[0]); $pass = $cipher->decrypt($config_lines[1]); } if ($batch eq "inl") { #we are doing a inetlink batch. $user = $cipher->decrypt($config_lines[2]); $pass = $cipher->decrypt($config_lines[3]); } my $host = "xxx.xxxx.xxx"; my $ftp = Net::FTPSSL->new($host, Port => 21, Encryption => 'E', D +ebug => 1) or die "Cannot connect to $host: $@"; #connect to the ftp +server. #lets do the inl stuff first: $ftp->login($user, $pass) or die "Can't Login: ", $ftp->message; #change working directory on the remote host: $ftp->cwd("outbound/AAPA/") or die "Can't change working directory +: ", $ftp->message; my @dir_listing = $ftp->nlst() or die "Can't List Files.... ", $ft +p->message; $ftp->binary(); foreach (@dir_listing) { #loop through files in the directory and download the ones tha +t do not have downloaded in the name. if ( m/RPT0900P\.\d\d\d.downloaded/ ) { #already seen this file, output to log print STDERR "$date : Found File (Seen It Already): $_ \n" +; } else { #haven't seen this file before: print STDERR "Found File (New): $_ \n"; print STDERR "Changing Local Working Directory to: $work_d +ir\n"; chdir($work_dir) or die "Couldn't change local working dir +ectory!!!\n"; $ftp->get($_) or die "Couldn't Download New File: $_ Becau +se: ", $ftp->message; } } $ftp->quit; } else { print "Error, i need some command line arguments!!\n"; print "Usage: rbc_ftp.pl <batch> <working_directory> <config>\n"; print "<batch> is equal to what run we want to run, ie: 'ns' for N +etSet or 'inl' for I-NetLink\n"; print "<working_directory> is equal to the directory we want to sa +ve the downloaded files in.\n"; print "<config> is equal to the location of the config file.\n"; } my $mailer = Email::Send->new( { mailer => 'SMTP::TLS', mailer_args => [ Host => 'smtp.gmail.com', #Port => 587, User => 'xxx.xxxx@xxxx.xx', Password=> 'xxxxxxxx', Hello => 'localhost', ] } ); my $email = Email::Simple->create( header => [ From => 'xxxx.xxxx@xxxx.xx', To => 'xxxxxx@xxxx.xxx', Subject => 'RBC FTP Status:', ], body => 'This is a test.....', ); eval { $mailer->send($email) }; die "Error sending email: $@" if $@; close(STDERR);

Has anybody seen something like this before? I am having a hard time finding the issue that keeps this script from running on ServerB. I have a feeling that it could be a issue with one of my librarys, but i am un-sure where to look now.


Thanks in advance for any help that i get....

Edit: Fixed terminology error pointed out by Illuminatus (regarding referal of the Clients as "Servers")


Edit2: Marked topic solved as it was a firewall upstream from the client causing the issues.

In reply to [Solved] Net::FTPSSL + TLS Handshake Fail by Pizentios

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • Outside of code tags, you may need to use entities for some characters:
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others taking refuge in the Monastery: (8)
    As of 2014-04-18 03:08 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      April first is:







      Results (460 votes), past polls