The way I do it now is to pull a DRS backup and decrypt with the DRS Backup Decrypter here- https://www.adhdtech.com/uctools.html
That gives me the entire TFTP directory. On Wed, Jun 6, 2018 at 11:49 AM, Ryan Ratliff (rratliff) <rratl...@cisco.com > wrote: > If you’re really in a bind “file get tftp *”. > > I agree syncing files between nodes with TFTP activated the way to go. > > -Ryan > > On Jun 6, 2018, at 11:43 AM, Charles Goldsmith <wo...@justfamily.org> > wrote: > > filelist doesn't work anymore, correct, and you can file get via the cli > as well. Neither is a "bulk" way to download and can be a lot of work. > :) We just need a 1 click button to copy all extra files from one node to > another > > On Wed, Jun 6, 2018 at 10:35 AM Ryan Ratliff (rratliff) < > rratl...@cisco.com> wrote: > >> If you know the files you can use curl or your favorite http package to >> get them http://tftp.ip:6970/. >> >> On some versions you can get http://tftp.ip:6970/filelist.txt to get an >> index of files. I think that file went away in 11.5 or 12.0 with >> enhancements made to serving static files. >> >> -Ryan >> >> On Jun 6, 2018, at 10:18 AM, Charles Goldsmith <wo...@justfamily.org> >> wrote: >> >> Thanks very much for this! Has anyone worked out an easy way to bulk >> download this data? Say you have to rebuild or add a node to an existing >> cluster and the customer doesn't have all of this info archived properly? >> >> >> On Mon, Jun 4, 2018 at 1:20 PM Brian Meade <bmead...@vt.edu> wrote: >> >>> Now on Github- https://github.com/bmeade90/BulkTFTP >>> >>> On Mon, Jun 4, 2018 at 8:47 AM, Brian Meade <bmead...@vt.edu> wrote: >>> >>>> Thanks for cleaning that up Anthony! >>>> >>>> My main goal with this is to bulk upload entire directories and all the >>>> sub-directories so I can easily upload all the Desktops directories and >>>> such. >>>> >>>> Since I'm bulk uploading so many files, I decided to just do a single >>>> node at a time but your edit should work fine to make this multi-node. >>>> >>>> Attached my finalized script I was able to use to upload a few hundred >>>> files to a 4-node cluster on Friday. >>>> >>>> On Sat, Jun 2, 2018 at 3:19 PM, Anthony Holloway < >>>> avholloway+cisco-v...@gmail.com> wrote: >>>> >>>>> Here's your code re-worked a little Brian, for you or for anyone else, >>>>> and I tested it on 11.5 and it works. I did not put in any error >>>>> handling, >>>>> so I'll leave that up to you. You can do things like Try/Catch or >>>>> checking >>>>> for resp.status_code == 200, file existence checking, etc. I figure, >>>>> knowing how to make it work was the challenge, not error handling, so I >>>>> left that out. >>>>> >>>>> # Install Python 2.7 and choose the option to add to path (off by >>>>> default) >>>>> # Then install two modules >>>>> # C:\>pip install requests >>>>> # C:\>pip install BeautifulSoup >>>>> # Then run the program >>>>> # C:\>python tftp.py >>>>> >>>>> import requests >>>>> from BeautifulSoup import BeautifulSoup >>>>> requests.packages.urllib3.disable_warnings() >>>>> >>>>> tftp_host = "" >>>>> tftp_user = "" >>>>> tftp_pass = "" >>>>> tftp_file = "" >>>>> tftp_path = "" >>>>> >>>>> url_base = "https://{}/cmplatform/".format(tftp_host) >>>>> url_login = "{}j_security_check".format(url_base) >>>>> url_upload = "{}tftpFileUpload.do".format(url_base) >>>>> >>>>> # Allows us to keep track of our login session >>>>> print "\nLogging in to {}...".format(tftp_host), >>>>> connection = requests.Session() >>>>> >>>>> # Start a new session by simply access a page on the server >>>>> resp = connection.get(url_base, verify = False) >>>>> >>>>> # Our login form data >>>>> form_data = { >>>>> "appNav": "cmplatform", >>>>> "j_username": tftp_user, >>>>> "j_password": tftp_pass >>>>> } >>>>> >>>>> # Our login submission to the server >>>>> resp = connection.post(url_login, verify = False, data = form_data) >>>>> print "Success!\n" >>>>> >>>>> # We need to grab the token the server gives us, so we can pass it >>>>> back upon upload >>>>> print "Grabbing a new token...", >>>>> soup = BeautifulSoup(connection.get(url_upload, verify = >>>>> False).content) >>>>> >>>>> # It's a hidden input element on the upload form with the name of >>>>> "token" >>>>> token = soup.find("input", {"name": "token"}).get("value") >>>>> print "Found! [{}]\n".format(token) >>>>> >>>>> # Our upload form submission data >>>>> payload = { >>>>> "struts.token.name": (None, "token"), >>>>> "token": (None, token), >>>>> "file": (tftp_file, open(tftp_file, "rb"), {"Content-Type": >>>>> "text/plain"}), >>>>> "directory": (None, tftp_path) >>>>> } >>>>> >>>>> # Our upload submission to the server >>>>> print "Uploading file: {}...".format(tftp_file), >>>>> resp = connection.post(url_upload, verify = False, files = payload) >>>>> print "Success!\n" >>>>> >>>>> print "Done!" >>>>> >>>>> If you want multiple server/multiple file support, it's really just a >>>>> small modification (highlighted in red): >>>>> >>>>> # Install Python 2.7 and choose the option to add to path (off by >>>>> default) >>>>> # Then install two modules >>>>> # C:\>pip install requests >>>>> # C:\>pip install BeautifulSoup >>>>> # Then run the program >>>>> # C:\>python tftp.py >>>>> >>>>> import requests >>>>> from BeautifulSoup import BeautifulSoup >>>>> requests.packages.urllib3.disable_warnings() >>>>> >>>>> tftp_hosts = [ >>>>> "host1", >>>>> "hostN" >>>>> ] >>>>> tftp_user = "" >>>>> tftp_pass = "" >>>>> >>>>> tftp_files = [ >>>>> "file1", >>>>> "fileN" >>>>> ] >>>>> tftp_path = "" >>>>> >>>>> for tftp_host in tftp_hosts: >>>>> >>>>> url_base = "https://{}/cmplatform/".format(tftp_host) >>>>> url_login = "{}j_security_check".format(url_base) >>>>> url_upload = "{}tftpFileUpload.do".format(url_base) >>>>> >>>>> # Allows us to keep track of our login session >>>>> print "\nLogging in to {}...".format(tftp_host), >>>>> connection = requests.Session() >>>>> >>>>> # Start a new session by simply access a page on the server >>>>> resp = connection.get(url_base, verify = False) >>>>> >>>>> # Our login form data >>>>> form_data = { >>>>> "appNav": "cmplatform", >>>>> "j_username": tftp_user, >>>>> "j_password": tftp_pass >>>>> } >>>>> >>>>> # Our login submission to the server >>>>> resp = connection.post(url_login, verify = False, data = form_data) >>>>> print "Success!\n" >>>>> for tftp_file in tftp_files: >>>>> >>>>> # We need to grab the token the server gives us, so we can pass it >>>>> back upon upload >>>>> print "Grabbing a new token...", >>>>> soup = BeautifulSoup(connection.get(url_upload, verify = >>>>> False).content) >>>>> >>>>> # It's a hidden input element on the upload form with the name of >>>>> "token" >>>>> token = soup.find("input", {"name": "token"}).get("value") >>>>> print "Found! [{}]\n".format(token) >>>>> >>>>> # Our upload form submission data >>>>> payload = { >>>>> "struts.token.name": (None, "token"), >>>>> "token": (None, token), >>>>> "file": (tftp_file, open(tftp_file, "rb"), {"Content-Type": >>>>> "text/plain"}), >>>>> "directory": (None, tftp_path) >>>>> } >>>>> >>>>> # Our upload submission to the server >>>>> print "Uploading file: {}...".format(tftp_file), >>>>> resp = connection.post(url_upload, verify = False, files = payload) >>>>> print "Success!\n" >>>>> >>>>> print "Done!" >>>>> >>>>> On Fri, Jun 1, 2018 at 3:38 PM Brian Meade <bmead...@vt.edu> wrote: >>>>> >>>>>> So just re-read through everything and sure enough I was sending to >>>>>> the wrong IP when running the script. No wonder it's shown as uploading >>>>>> successfully the entire time. >>>>>> >>>>>> Thanks for you and Stephen's assistance! >>>>>> >>>>>> Tommy, BTW you can remove a lot of the manual set headers if you want >>>>>> to clean yours up. It seems to work without them. >>>>>> >>>>>> Thanks, >>>>>> Brian Meade >>>>>> >>>>>> On Fri, Jun 1, 2018 at 4:10 PM, Schlotterer, Tommy < >>>>>> tschlotte...@presidio.com> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Just tested on CUCM 11.5, worked just fine. >>>>>>> >>>>>>> >>>>>>> >>>>>>> Thanks >>>>>>> >>>>>>> >>>>>>> Tommy >>>>>>> >>>>>>> >>>>>>> >>>>>>> *From:* bmead...@gmail.com [mailto:bmead...@gmail.com] *On Behalf >>>>>>> Of *Brian Meade >>>>>>> *Sent:* Friday, June 1, 2018 4:06 PM >>>>>>> *To:* Schlotterer, Tommy <tschlotte...@presidio.com> >>>>>>> *Cc:* cisco-voip voyp list <cisco-voip@puck.nether.net> >>>>>>> *Subject:* Re: [cisco-voip] CUCM Bulk TFTP File Upload >>>>>>> >>>>>>> >>>>>>> >>>>>>> *EXTERNAL EMAIL* >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Thanks Tommy! >>>>>>> >>>>>>> >>>>>>> >>>>>>> Have you tested against CUCM 11.x okay? >>>>>>> >>>>>>> >>>>>>> >>>>>>> I need to build the dependencies to fully run yours. I tried >>>>>>> pulling out the important upload code but seeing the same issue I'm >>>>>>> having >>>>>>> with my code. >>>>>>> >>>>>>> >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> Brian Meade >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Fri, Jun 1, 2018 at 1:18 PM, Schlotterer, Tommy < >>>>>>> tschlotte...@presidio.com> wrote: >>>>>>> >>>>>>> Brian, >>>>>>> >>>>>>> >>>>>>> >>>>>>> Here is my really hacky python script to do this. >>>>>>> >>>>>>> >>>>>>> >>>>>>> Thanks >>>>>>> >>>>>>> >>>>>>> Tommy >>>>>>> >>>>>>> >>>>>>> >>>>>>> *From:* cisco-voip [mailto:cisco-voip-boun...@puck.nether.net] *On >>>>>>> Behalf Of *Brian Meade >>>>>>> *Sent:* Friday, June 1, 2018 9:54 AM >>>>>>> *To:* cisco-voip voyp list <cisco-voip@puck.nether.net> >>>>>>> *Subject:* [cisco-voip] CUCM Bulk TFTP File Upload >>>>>>> >>>>>>> >>>>>>> >>>>>>> *EXTERNAL EMAIL* >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Does anyone have a working script for this? >>>>>>> >>>>>>> >>>>>>> >>>>>>> I put together a script in python to do this but hitting some issues. >>>>>>> >>>>>>> >>>>>>> >>>>>>> Right now I’ve got it to the point that it’s trying to upload a >>>>>>> single file. >>>>>>> >>>>>>> >>>>>>> >>>>>>> I used Fiddler to copy what I saw for a working request through a >>>>>>> browser. >>>>>>> >>>>>>> >>>>>>> >>>>>>> I first do a Get to the cmplatform page to get a cookie. >>>>>>> >>>>>>> >>>>>>> >>>>>>> I then do a Post to the /cmplatform/j_security_check page to >>>>>>> authenticate that cookie. >>>>>>> >>>>>>> >>>>>>> >>>>>>> I then do a Get to /cmplatform/tftpFileUpload.do to get a Struts >>>>>>> Token. >>>>>>> >>>>>>> >>>>>>> >>>>>>> I then do a Post to /cmplatform/tftpFileUpload.do with the Struts >>>>>>> token, filename, and directory details. >>>>>>> >>>>>>> >>>>>>> >>>>>>> This looks to be successful as I get a "File uploaded successfully" >>>>>>> message returned but then I can't find the file on the TFTP File >>>>>>> Management >>>>>>> page. >>>>>>> >>>>>>> >>>>>>> >>>>>>> I tried using the curl methods I found here ( >>>>>>> https://communities.cisco.com/docs/DOC-43506 ) but no luck there. >>>>>>> Not sure if this works in 11.5 without grabbing the Struts token. >>>>>>> Without >>>>>>> a token, I get an error message saying something to the affect of I hit >>>>>>> the >>>>>>> Submit button twice. >>>>>>> >>>>>>> >>>>>>> >>>>>>> Here's what it looks like when my script runs in Fiddler: >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> This looks almost exactly like the real example through a browser I >>>>>>> captured minus a few headers I tried manually adding with no luck. >>>>>>> >>>>>>> >>>>>>> >>>>>>> Python script attached. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> * Tommy Schlotterer | Systems Engineer - Collaboration Presidio >>>>>>> (NASDAQ: PSDO) | presidio.com <http://presidio.com/> 20 N Saint Clair >>>>>>> 3rd >>>>>>> Floor, Toledo, OH 43604 >>>>>>> <https://maps.google.com/?q=20+N+Saint+Clair+3rd+Floor,+Toledo,+OH+43604&entry=gmail&source=g> >>>>>>> D: 419.214.1415 <(419)%20214-1415> | C: 419.706.0259 <(419)%20706-0259> >>>>>>> | >>>>>>> tschlotte...@presidio.com <tschlotte...@presidio.com>* >>>>>>> >>>>>>> >>>>>>> >>>>>>> * [image: Future. Built.] <http://www.presidio.com/>* >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> * Follow us: [image: Follow Presidio on Twitter] >>>>>>> <http://www.twitter.com/presidio>* >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> *This message w/attachments (message) is intended solely for the use >>>>>>> of the intended recipient(s) and may contain information that is >>>>>>> privileged, confidential or proprietary. If you are not an intended >>>>>>> recipient, please notify the sender, and then please delete and destroy >>>>>>> all >>>>>>> copies and attachments. Please be advised that any review or >>>>>>> dissemination >>>>>>> of, or the taking of any action in reliance on, the information >>>>>>> contained >>>>>>> in or attached to this message is prohibited.* >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> [image: Future. Built.] <http://www.presidio.com/> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Follow us: >>>>>>> >>>>>>> [image: Follow Presidio on Twitter] >>>>>>> <http://www.twitter.com/presidio> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> _______________________________________________ >>>>>> cisco-voip mailing list >>>>>> cisco-voip@puck.nether.net >>>>>> https://puck.nether.net/mailman/listinfo/cisco-voip >>>>>> >>>>> >>>> >>> _______________________________________________ >>> cisco-voip mailing list >>> cisco-voip@puck.nether.net >>> https://puck.nether.net/mailman/listinfo/cisco-voip >>> >> _______________________________________________ >> cisco-voip mailing list >> cisco-voip@puck.nether.net >> https://puck.nether.net/mailman/listinfo/cisco-voip >> >> >
_______________________________________________ cisco-voip mailing list cisco-voip@puck.nether.net https://puck.nether.net/mailman/listinfo/cisco-voip