The servers in our DMZ do not have any access to the outside world. Getting Symantec dat files onto the DMZ AV server was kind of a pain. I would manually download the latest file (when I remembered) and then copy it to the correct directory on the server. I was getting kind of tired of manually doing this and add to that it was only happening about 2 times a month. Today I decided that I would write a script in python to take care of getting the correct file and moving it to the right location for me. I have not set it up as a scheduled task yet but I may in the future. Here is what I came up with:
Disclaimer: I know that this may not be the best code written. I am still learning so please make comments that could improve on what is here. Thanks.
#!/usr/bin/env python import datetime from ftplib import FTP import shutil, os ### Config stuff ### # FTP site to connect to ftpsite = 'ftp.symantec.com' # Directory where the files are stored on the FTP server directory = 'AVDEFS/symantec_antivirus_corp/xdb/' # Set a variable for todays date like Feb 03 to match to today = datetime.datetime.now().strftime("%b %d") # Array to hold the directory listing of the remote server data =  # Set the directory on the DMZ AV server to copy to destDir = r'\\SomeRemoteAvServer\RemoteDir' def handleDownload(block): file.write(block) print ".", # Find the file that matches todays date def getFilename(data): for line in data: perms, x, y, z, size, month, day, time, filename = line.split() if len(day) == 1: day = '0' + day timestamp = month + ' ' + day if timestamp == today: return filename def compareFileSize(filename,destFile): """ Compares src file to destFile to see if they are the same size. """ if os.path.getsize(filename) == os.path.getsize(destFile): return 1 else: return 0 # Open a connection to the FTP server ftp = FTP(ftpsite) # Log in as anonymous print 'Logging in.' print ftp.login() # Change to the directory where the files are stored ftp.cwd(directory) # Get a directory listing ftp.dir(data.append) # Get the file that matches todays date from the directory listing filename = getFilename(data) print 'Opening local file ' + filename file = open(filename, 'wb') # Download the file a chunk at a time # Each chunk is sent to handleDownload # We append the chunk to the file and then print a '.' for progress # RETR is an FTP command print 'Getting ' + filename ftp.retrbinary('RETR ' + filename, handleDownload) # Clean up time # Close the local file print print 'Closing file ' + filename file.close() # Disconnect from the FTP server print 'Closing FTP connection' print ftp.close() destFile = os.path.join(destDir,filename) # Now copy the file to the AV server in the DMZ if it does not already exist # then remove it from the local system. if os.path.isfile(destFile): print 'The file %s is already on the server.' % filename os.remove(filename) else: print 'Copying the file to %s' % destDir shutil.copy2(filename, destDir) # Compare the two files to make sure they copied correctly if compareFileSize(filename, destFile): print 'The file looks to have copied fine. Deleting the local copy now.' os.remove(filename) else: print 'Something seems to have gone wrong. The file did not copy correctly to %s' % destDir