<div dir="ltr">The way I do it now is to pull a DRS backup and decrypt with the DRS Backup Decrypter here- <a href="https://www.adhdtech.com/uctools.html">https://www.adhdtech.com/uctools.html</a><div><br></div><div>That gives me the entire TFTP directory.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 6, 2018 at 11:49 AM, Ryan Ratliff (rratliff) <span dir="ltr"><<a href="mailto:rratliff@cisco.com" target="_blank">rratliff@cisco.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word;line-break:after-white-space">
If you’re really in a bind “file get tftp *”.
<div><br>
</div>
<div>I agree syncing files between nodes with TFTP activated the way to go.</div><span class="HOEnZb"><font color="#888888">
</font></span><div><span class="HOEnZb"><font color="#888888"><br>
<div>-Ryan </div></font></span><div><div class="h5">
<div><br>
<div>On Jun 6, 2018, at 11:43 AM, Charles Goldsmith <<a href="mailto:wokka@justfamily.org" target="_blank">wokka@justfamily.org</a>> wrote:</div>
<br class="m_-2136249851717309710Apple-interchange-newline">
<div>
<div dir="ltr">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</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Wed, Jun 6, 2018 at 10:35 AM Ryan Ratliff (rratliff) <<a href="mailto:rratliff@cisco.com" target="_blank">rratliff@cisco.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word;line-break:after-white-space">If you know the files you can use curl or your favorite http package to get them
<a href="http://tftp.ip:6970/" target="_blank">http://tftp.ip:6970/</a>.
<div><br>
</div>
<div>On some versions you can get <a href="http://tftp.ip:6970/filelist.txt" target="_blank">
http://tftp.ip:6970/filelist.<wbr>txt</a> 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.</div>
<div></div>
</div>
<div style="word-wrap:break-word;line-break:after-white-space">
<div><br>
<div>-Ryan </div>
</div>
</div>
<div style="word-wrap:break-word;line-break:after-white-space">
<div>
<div><br>
<div>On Jun 6, 2018, at 10:18 AM, Charles Goldsmith <<a href="mailto:wokka@justfamily.org" target="_blank">wokka@justfamily.org</a>> wrote:</div>
<br class="m_-2136249851717309710m_-8416396079946089123Apple-interchange-newline">
<div>
<div dir="ltr">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?
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Mon, Jun 4, 2018 at 1:20 PM Brian Meade <<a href="mailto:bmeade90@vt.edu" target="_blank">bmeade90@vt.edu</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Now on Github- <a href="https://github.com/bmeade90/BulkTFTP" target="_blank">https://github.com/<wbr>bmeade90/BulkTFTP</a></div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Mon, Jun 4, 2018 at 8:47 AM, Brian Meade <span dir="ltr">
<<a href="mailto:bmeade90@vt.edu" target="_blank">bmeade90@vt.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Thanks for cleaning that up Anthony!
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>Attached my finalized script I was able to use to upload a few hundred files to a 4-node cluster on Friday.</div>
</div>
<div class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517HOEnZb">
<div class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517h5">
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sat, Jun 2, 2018 at 3:19 PM, Anthony Holloway <span dir="ltr">
<<a href="mailto:avholloway+cisco-voip@gmail.com" target="_blank">avholloway+cisco-voip@gmail.<wbr>com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">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.
<div><br>
</div>
<div>
<div><font face="monospace"># Install Python 2.7 and choose the option to add to path (off by default)</font></div>
<div><font face="monospace"># Then install two modules</font></div>
<div><font face="monospace"># C:\>pip install requests</font></div>
<div><font face="monospace"># C:\>pip install BeautifulSoup</font></div>
<div><font face="monospace"># Then run the program</font></div>
<div><font face="monospace"># C:\>python tftp.py</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">import requests</font></div>
<div><font face="monospace">from BeautifulSoup import BeautifulSoup</font></div>
<div><font face="monospace">requests.packages.urllib3.<wbr>disable_warnings()</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">tftp_host = ""</font></div>
<div><font face="monospace">tftp_user = ""</font></div>
<div><font face="monospace">tftp_pass = ""</font></div>
<div><font face="monospace">tftp_file = ""</font></div>
<div><font face="monospace">tftp_path = ""</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">url_base = "https://{}/cmplatform/".<wbr>format(tftp_host)</font></div>
<div><font face="monospace">url_login = "{}j_security_check".format(<wbr>url_base)</font></div>
<div><font face="monospace">url_upload = "{}tftpFileUpload.do".format(<wbr>url_base)</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"># Allows us to keep track of our login session</font></div>
<div><font face="monospace">print "\nLogging in to {}...".format(tftp_host),</font></div>
<div><font face="monospace">connection = requests.Session()</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"># Start a new session by simply access a page on the server</font></div>
<div><font face="monospace">resp = connection.get(url_base, verify = False)</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"># Our login form data</font></div>
<div><font face="monospace">form_data = {</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"appNav": "cmplatform",</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"j_username": tftp_user,</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"j_password": tftp_pass</font></div>
<div><font face="monospace">}</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"># Our login submission to the server</font></div>
<div><font face="monospace">resp = connection.post(url_login, verify = False, data = form_data)</font></div>
<div><font face="monospace">print "Success!\n"</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"># We need to grab the token the server gives us, so we can pass it back upon upload</font></div>
<div><font face="monospace">print "Grabbing a new token...",</font></div>
<div><font face="monospace">soup = BeautifulSoup(connection.get(<wbr>url_upload, verify = False).content)</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"># It's a hidden input element on the upload form with the name of "token"</font></div>
<div><font face="monospace">token = soup.find("input", {"name": "token"}).get("value")</font></div>
<div><font face="monospace">print "Found! [{}]\n".format(token)</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"># Our upload form submission data</font></div>
<div><font face="monospace">payload = {</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"<a href="http://struts.token.name/" target="_blank">struts.token.name</a>": (None, "token"),</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"token": (None, token),</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"file": (tftp_file, open(tftp_file, "rb"), {"Content-Type": "text/plain"}),</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"directory": (None, tftp_path)</font></div>
<div><font face="monospace">}</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"># Our upload submission to the server</font></div>
<div><font face="monospace">print "Uploading file: {}...".format(tftp_file),</font></div>
<div><font face="monospace">resp = connection.post(url_upload, verify = False, files = payload)</font></div>
<div><font face="monospace">print "Success!\n"</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">print "Done!"</font></div>
</div>
<div><br>
</div>
<div>If you want multiple server/multiple file support, it's really just a small modification (highlighted in red):</div>
<div><br>
</div>
<div>
<div><font face="monospace"># Install Python 2.7 and choose the option to add to path (off by default)</font></div>
<div><font face="monospace"># Then install two modules</font></div>
<div><font face="monospace"># C:\>pip install requests</font></div>
<div><font face="monospace"># C:\>pip install BeautifulSoup</font></div>
<div><font face="monospace"># Then run the program</font></div>
<div><font face="monospace"># C:\>python tftp.py</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">import requests</font></div>
<div><font face="monospace">from BeautifulSoup import BeautifulSoup</font></div>
<div><font face="monospace">requests.packages.urllib3.<wbr>disable_warnings()</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace" color="#ff0000">tftp_hosts = [</font></div>
<div><font face="monospace" color="#ff0000"><span style="white-space:pre-wrap"></span>"host1",</font></div>
<div><font face="monospace" color="#ff0000"><span style="white-space:pre-wrap"></span>"hostN"</font></div>
<div><font face="monospace" color="#ff0000">]</font></div>
<div><font face="monospace">tftp_user = ""</font></div>
<div><font face="monospace">tftp_pass = ""</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace" color="#ff0000">tftp_files = [</font></div>
<div><font face="monospace" color="#ff0000"><span style="white-space:pre-wrap"></span>"file1",</font></div>
<div><font face="monospace" color="#ff0000"><span style="white-space:pre-wrap"></span>"fileN"</font></div>
<div><font face="monospace" color="#ff0000">]</font></div>
<div><font face="monospace">tftp_path = ""</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace" color="#ff0000">for tftp_host in tftp_hosts:</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>url_base = "https://{}/cmplatform/".<wbr>format(tftp_host)</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>url_login = "{}j_security_check".format(<wbr>url_base)</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>url_upload = "{}tftpFileUpload.do".format(<wbr>url_base)</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span># Allows us to keep track of our login session</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>print "\nLogging in to {}...".format(tftp_host),</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>connection = requests.Session()</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span># Start a new session by simply access a page on the server</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>resp = connection.get(url_base, verify = False)</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span># Our login form data</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>form_data = {</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"appNav": "cmplatform",</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"j_username": tftp_user,</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"j_password": tftp_pass</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>}</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span># Our login submission to the server</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>resp = connection.post(url_login, verify = False, data = form_data)</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>print "Success!\n"</font></div>
<div><span style="white-space:pre-wrap"><font face="monospace"></font></span></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span><font color="#ff0000">for tftp_file in tftp_files:</font></font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span># We need to grab the token the server gives us, so we can pass it back upon upload</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>print "Grabbing a new token...",</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>soup = BeautifulSoup(connection.get(<wbr>url_upload, verify = False).content)</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span># It's a hidden input element on the upload form with the name of "token"</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>token = soup.find("input", {"name": "token"}).get("value")</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>print "Found! [{}]\n".format(token)</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span># Our upload form submission data</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>payload = {</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"<a href="http://struts.token.name/" target="_blank">struts.token.name</a>": (None, "token"),</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"token": (None, token),</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"file": (tftp_file, open(tftp_file, "rb"), {"Content-Type": "text/plain"}),</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>"directory": (None, tftp_path)</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>}</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span># Our upload submission to the server</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>print "Uploading file: {}...".format(tftp_file),</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>resp = connection.post(url_upload, verify = False, files = payload)</font></div>
<div><font face="monospace"><span style="white-space:pre-wrap"></span>print "Success!\n"</font></div>
<div><font face="monospace"><br>
</font></div>
<div><font face="monospace">print "Done!"</font></div>
</div>
</div>
<br>
<div class="gmail_quote">
<div>
<div class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493h5">
<div dir="ltr">On Fri, Jun 1, 2018 at 3:38 PM Brian Meade <<a href="mailto:bmeade90@vt.edu" target="_blank">bmeade90@vt.edu</a>> wrote:<br>
</div>
</div>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493h5">
<div dir="ltr">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.
<div><br>
</div>
<div>Thanks for you and Stephen's assistance!</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Brian Meade</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Fri, Jun 1, 2018 at 4:10 PM, Schlotterer, Tommy <span dir="ltr">
<<a href="mailto:tschlotterer@presidio.com" target="_blank">tschlotterer@presidio.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="EN-US" link="blue" vlink="purple">
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
<div class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Just tested on CUCM 11.5, worked just fine.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Thanks<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><br>
Tommy<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">
<a href="mailto:bmeade90@gmail.com" target="_blank">bmeade90@gmail.com</a> [mailto:<a href="mailto:bmeade90@gmail.com" target="_blank">bmeade90@gmail.com</a>]
<b>On Behalf Of </b>Brian Meade<br>
<b>Sent:</b> Friday, June 1, 2018 4:06 PM<br>
<b>To:</b> Schlotterer, Tommy <<a href="mailto:tschlotterer@presidio.com" target="_blank">tschlotterer@presidio.com</a>><br>
<b>Cc:</b> cisco-voip voyp list <<a href="mailto:cisco-voip@puck.nether.net" target="_blank">cisco-voip@puck.nether.net</a>><br>
<b>Subject:</b> Re: [cisco-voip] CUCM Bulk TFTP File Upload<u></u><u></u></span></p>
<div>
<div class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163h5">
<p class="MsoNormal"><u></u> <u></u></p>
<table class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024MsoNormalTable" border="1" cellspacing="4" cellpadding="0" style="background:lightyellow;border:solid black 1.0pt">
<tbody>
<tr>
<td style="border:none;padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"><strong><span style="color:#ff3333">EXTERNAL EMAIL</span></strong><u></u><u></u></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif;display:none"><u></u> <u></u></span></p>
<table class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024MsoNormalTable" border="0" cellspacing="4" cellpadding="0">
<tbody>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"> <u></u><u></u></p>
</td>
</tr>
</tbody>
</table>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif">Thanks Tommy!<u></u><u></u></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif">Have you tested against CUCM 11.x okay?<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif">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.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif">Thanks,<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif">Brian Meade<u></u><u></u></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif">On Fri, Jun 1, 2018 at 1:18 PM, Schlotterer, Tommy <<a href="mailto:tschlotterer@presidio.com" target="_blank">tschlotterer@presidio.com</a>> wrote:<u></u><u></u></span></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Brian,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Here is my really hacky python script to do this.
</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Thanks</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><br>
Tommy</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> cisco-voip [mailto:<a href="mailto:cisco-voip-bounces@puck.nether.net" target="_blank">cisco-voip-bounces@<wbr>puck.nether.net</a>]
<b>On Behalf Of </b>Brian Meade<br>
<b>Sent:</b> Friday, June 1, 2018 9:54 AM<br>
<b>To:</b> cisco-voip voyp list <<a href="mailto:cisco-voip@puck.nether.net" target="_blank">cisco-voip@puck.nether.net</a>><br>
<b>Subject:</b> [cisco-voip] CUCM Bulk TFTP File Upload</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<table class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024MsoNormalTable" border="1" cellspacing="4" cellpadding="0" style="background:lightyellow;border:solid black 1.0pt">
<tbody>
<tr>
<td style="border:none;padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"><strong><span style="color:#ff3333">EXTERNAL EMAIL</span></strong><u></u><u></u></p>
</td>
</tr>
</tbody>
</table>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<table class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024MsoNormalTable" border="0" cellspacing="4" cellpadding="0">
<tbody>
<tr>
<td style="padding:.75pt .75pt .75pt .75pt">
<p class="MsoNormal"> <u></u><u></u></p>
</td>
</tr>
</tbody>
</table>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif">Does anyone have a working script for this?</span><u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif">I put together a script in python to do this but hitting some issues.</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Right now I’ve got it to the point that it’s trying to upload a single file.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">I used Fiddler to copy what I saw for a working request through a browser.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">I first do a Get to the cmplatform page to get a cookie.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">I then do a Post to the /cmplatform/j_security_check page to authenticate that cookie.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">I then do a Get to /cmplatform/tftpFileUpload.do to get a Struts Token.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">I then do a Post to /cmplatform/tftpFileUpload.do with the Struts token, filename, and directory details.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">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.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">I tried using the curl methods I found here (
<a href="https://communities.cisco.com/docs/DOC-43506" target="_blank"><span style="color:#0563c1">https://communities.cisco.com/<wbr>docs/DOC-43506</span></a> ) 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.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Here's what it looks like when my script runs in Fiddler:</span><u></u><u></u></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><img border="0" width="544" height="450" id="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024m_-299166809608453111_x005f_x0000_i1025"></span><u></u><u></u></p>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">This looks almost exactly like the real example through a browser I captured minus a few headers I tried manually adding with no luck.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">Python script attached.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"> </span><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:7.5pt;font-family:"Verdana",sans-serif;color:gray"><br>
Tommy Schlotterer | Systems Engineer - Collaboration<br>
Presidio (NASDAQ: PSDO) | <a href="http://presidio.com/" title="" target="_blank">
presidio.com</a><br>
<a href="https://maps.google.com/?q=20+N+Saint+Clair+3rd+Floor,+Toledo,+OH+43604&entry=gmail&source=g" target="_blank">20 N Saint Clair 3rd Floor, Toledo, OH 43604</a><br>
D: <a href="tel:(419)%20214-1415" value="+14192141415" target="_blank">419.214.1415</a> | C:
<a href="tel:(419)%20706-0259" value="+14197060259" target="_blank">419.706.0259</a> |
<a href="mailto:tschlotterer@presidio.com" title="Click to send email to Schlotterer, Tommy" target="_blank">
tschlotterer@presidio.com</a></span></b><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:7.5pt;font-family:"Verdana",sans-serif;color:gray"><br>
<br>
<a href="http://www.presidio.com/" target="_blank"><span style="text-decoration:none"><img border="0" width="223" height="49" id="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024m_-299166809608453111IMG1" src="https://www2.presidio.com/signatures/Presidio_Blue_FutureBuilt_200px.png" alt="Future. Built."></span></a></span></b><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:7.5pt;font-family:"Verdana",sans-serif;color:gray"><br>
Follow us:<br>
<br>
<a href="http://www.twitter.com/presidio" target="_blank"><span style="text-decoration:none"><img border="0" width="22" height="22" id="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024_x0000_i1027" src="http://twitter-badges.s3.amazonaws.com/t_small-a.png" alt="Follow Presidio on Twitter"></span></a></span></b><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><em><span style="font-size:8.5pt">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<span style="color:#1f497d">.
</span>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.</span></em><u></u><u></u></p>
</div>
</blockquote>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif"><u></u> <u></u></span></p>
</div>
</div>
</div>
</div>
<div>
<div class="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163h5">
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
<span style="FONT-SIZE:xx-small;FONT-FAMILY:Verdana;FONT-WEIGHT:bolder;COLOR:#808080"><br>
<br>
<a href="http://www.presidio.com/" target="_blank"><img id="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024IMG1" border="0" alt="Future. Built." src="https://www2.presidio.com/signatures/Presidio_Blue_FutureBuilt_200px.png" width="223" height="49"></a><br>
<br>
</span>
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
<span style="FONT-FAMILY:Verdana;COLOR:#808080;FONT-SIZE:xx-small;FONT-WEIGHT:bolder"><br>
Follow us:<br>
<br>
<a href="http://www.twitter.com/presidio" target="_blank"><img id="m_-2136249851717309710m_-8416396079946089123m_4569493297541086517m_-6411392944766899493m_4520580605570019993m_-3759707065250595163m_8573012585236457024IMG1" border="0" alt="Follow Presidio on Twitter" src="http://twitter-badges.s3.amazonaws.com/t_small-a.png" width="22" height="22"></a><br>
<br>
</span>
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
<span style="FONT-FAMILY:Verdana;COLOR:#808080;FONT-SIZE:xx-small;FONT-WEIGHT:bolder"><br>
<br>
</span>
<div><br class="m_-2136249851717309710m_-8416396079946089123webkit-block-placeholder">
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
<span>______________________________<wbr>_________________<br>
cisco-voip mailing list<br>
<a href="mailto:cisco-voip@puck.nether.net" target="_blank">cisco-voip@puck.nether.net</a><br>
<a href="https://puck.nether.net/mailman/listinfo/cisco-voip" rel="noreferrer" target="_blank">https://puck.nether.net/<wbr>mailman/listinfo/cisco-voip</a><br>
</span></blockquote>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
______________________________<wbr>_________________<br>
cisco-voip mailing list<br>
<a href="mailto:cisco-voip@puck.nether.net" target="_blank">cisco-voip@puck.nether.net</a><br>
<a href="https://puck.nether.net/mailman/listinfo/cisco-voip" rel="noreferrer" target="_blank">https://puck.nether.net/<wbr>mailman/listinfo/cisco-voip</a><br>
</blockquote>
</div>
______________________________<wbr>_________________<br>
cisco-voip mailing list<br>
<a href="mailto:cisco-voip@puck.nether.net" target="_blank">cisco-voip@puck.nether.net</a><br>
<a href="https://puck.nether.net/mailman/listinfo/cisco-voip" target="_blank">https://puck.nether.net/<wbr>mailman/listinfo/cisco-voip</a><br>
</div>
</div>
<br>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<br>
</div></div></div>
</div>
</blockquote></div><br></div>