Skip to content

Instantly share code, notes, and snippets.

@qnnnnez
Last active September 6, 2017 17:37
Show Gist options
  • Save qnnnnez/37c1ef020b205bdea55d41730978aaf5 to your computer and use it in GitHub Desktop.
Save qnnnnez/37c1ef020b205bdea55d41730978aaf5 to your computer and use it in GitHub Desktop.
python3 fbi_upload.py 3ds.hostname game.cia
#!/usr/bin/env python3
LISTEN_PORT = 10086
import tornado.ioloop
import tornado.web
import os
import socket
import struct
import sys
class MainHandler(tornado.web.RequestHandler):
async def get(self):
print('request received')
size = os.path.getsize(src_path)
self.set_header('Content-Length', size)
with open(src_path, 'rb') as src:
while True:
data = src.read(16384)
if not data:
break
self.write(data)
await self.flush()
def on_finish(self):
tornado.ioloop.IOLoop.current().stop()
def make_app():
return tornado.web.Application([
(r'/', MainHandler)
])
def send_url(remote_addr):
c = socket.socket()
c.connect(remote_addr)
local_ip = c.getsockname()[0]
url = 'http://{}:{}/'.format(local_ip, LISTEN_PORT)
payload = struct.pack('!I', len(url)) + url.encode('ascii')
print('sending payload:', repr(payload), 'to', remote_addr)
c.send(payload)
c.close()
if __name__ == '__main__':
app = make_app()
app.listen(LISTEN_PORT)
src_path = sys.argv[2]
try:
host, port = sys.argv[1].split(':')
port = int(port)
except:
host = sys.argv[1]
port = 5000
send_url((host, port))
tornado.ioloop.IOLoop.current().start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment