mirror of
https://gitlab.com/Theopse/fbi-i18n-zh.git
synced 2025-04-06 03:58:02 +08:00
commit
1b5cc0a268
@ -2,4 +2,7 @@
|
||||
|
||||
Simple Python script for serving local files to FBI's remote installer. Requires [Python](https://www.python.org/downloads/).
|
||||
|
||||
**Usage**: python servefiles.py (ip) (file/directory) \[host ip\]
|
||||
**Usage**: python servefiles.py (3ds ip) (file / directory) \[host ip\] \[host port\]
|
||||
|
||||
- the file can be *.cia or *.tik
|
||||
- the directory have to contain *.cia or *.tik files
|
||||
|
4
servefiles/drop cias or folder here.sh
Normal file
4
servefiles/drop cias or folder here.sh
Normal file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
read -p "Type the IP address of your 3DS: " -e input
|
||||
python servefiles.py $input .
|
@ -1,4 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import socket
|
||||
import struct
|
||||
@ -8,79 +10,83 @@ import time
|
||||
import urllib
|
||||
|
||||
try:
|
||||
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
||||
from SocketServer import TCPServer
|
||||
from urlparse import urljoin
|
||||
from urllib import pathname2url, quote
|
||||
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
||||
from SocketServer import TCPServer
|
||||
from urlparse import urljoin
|
||||
from urllib import pathname2url, quote
|
||||
except ImportError:
|
||||
from http.server import SimpleHTTPRequestHandler
|
||||
from socketserver import TCPServer
|
||||
from urllib.parse import urljoin, quote
|
||||
from urllib.request import pathname2url
|
||||
from http.server import SimpleHTTPRequestHandler
|
||||
from socketserver import TCPServer
|
||||
from urllib.parse import urljoin, quote
|
||||
from urllib.request import pathname2url
|
||||
|
||||
if len(sys.argv) < 3:
|
||||
print("Usage: " + sys.argv[0] + " <ip> <file/directory> [host ip]")
|
||||
sys.exit(1)
|
||||
if len(sys.argv) < 3 or len(sys.argv) > 5:
|
||||
print('Usage:', sys.argv[0], '<target ip> <file / directory> [host ip] [host port]')
|
||||
sys.exit(1)
|
||||
|
||||
ip = sys.argv[1]
|
||||
directory = sys.argv[2]
|
||||
accepted_extension = ('.cia', '.tik')
|
||||
target_ip = sys.argv[1]
|
||||
target_path = sys.argv[2]
|
||||
hostPort = 8080 # default value
|
||||
|
||||
if not os.path.exists(directory):
|
||||
print(directory + ": No such file or directory.")
|
||||
sys.exit(1)
|
||||
if not os.path.exists(target_path):
|
||||
print(target_path, ': No such file or directory.', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if len(sys.argv) >= 4:
|
||||
hostIp = sys.argv[3]
|
||||
hostIp = sys.argv[3]
|
||||
if len(sys.argv) == 5:
|
||||
hostPort = int(sys.argv[4])
|
||||
else:
|
||||
hostIp = [(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]
|
||||
print('Finding host ip ...') # loop over network address to find one
|
||||
hostIp = [(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]
|
||||
|
||||
print("Preparing data...")
|
||||
print('Preparing data ...')
|
||||
baseUrl = hostIp + ':' + str(hostPort) + '/'
|
||||
|
||||
baseUrl = hostIp + ":8080/"
|
||||
payload = ""
|
||||
if os.path.isfile(target_path):
|
||||
if target_path.endswith(accepted_extension):
|
||||
file_list_payload = baseUrl + quote(os.path.basename(target_path))
|
||||
directory = os.path.dirname(target_path) # get file directory
|
||||
else:
|
||||
print('This file has no extension like :', accepted_extension, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if os.path.isfile(directory):
|
||||
payload += baseUrl + quote(os.path.basename(directory))
|
||||
directory = os.path.dirname(directory)
|
||||
else:
|
||||
for file in [ file for file in next(os.walk(directory))[2] if file.endswith(('.cia', '.tik')) ]:
|
||||
payload += baseUrl + quote(file) + "\n"
|
||||
directory = target_path # it's a directory
|
||||
file_list_payload = '' # init the payload before adding lines
|
||||
for file in [file for file in next(os.walk(target_path))[2] if file.endswith(accepted_extension)]:
|
||||
file_list_payload += baseUrl + quote(file) + '\n'
|
||||
|
||||
if len(payload) == 0:
|
||||
print("No files to serve.")
|
||||
sys.exit(1)
|
||||
if len(file_list_payload) == 0:
|
||||
print('No files to serve.', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
payloadBytes = payload.encode("ascii")
|
||||
file_list_payloadBytes = file_list_payload.encode('ascii')
|
||||
|
||||
if not directory == "":
|
||||
os.chdir(directory)
|
||||
if directory and directory != '.': # doesn't need to move if it's already the current working directory
|
||||
os.chdir(directory) # set working directory to the right folder to be able to serve files
|
||||
|
||||
print("")
|
||||
print("URLS:")
|
||||
print(payload)
|
||||
print("")
|
||||
print('\nURLS (data) :')
|
||||
print(file_list_payload, '\n')
|
||||
|
||||
print("Opening HTTP server on port 8080...")
|
||||
|
||||
server = TCPServer(("", 8080), SimpleHTTPRequestHandler)
|
||||
print('Opening HTTP server on port :', hostPort)
|
||||
server = TCPServer(('', hostPort), SimpleHTTPRequestHandler)
|
||||
thread = threading.Thread(target=server.serve_forever)
|
||||
thread.start()
|
||||
|
||||
try:
|
||||
print("Sending URL(s) to " + ip + ":5000...")
|
||||
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.connect((ip, 5000))
|
||||
sock.sendall(struct.pack('!L', len(payloadBytes)) + payloadBytes)
|
||||
while len(sock.recv(1)) < 1:
|
||||
time.sleep(0.05)
|
||||
|
||||
sock.close()
|
||||
print('Sending URL(s) to', target_ip, 'on port 5000 ...')
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.connect((target_ip, 5000))
|
||||
sock.sendall(struct.pack('!L', len(file_list_payloadBytes)) + file_list_payloadBytes)
|
||||
while len(sock.recv(1)) < 1:
|
||||
time.sleep(0.05)
|
||||
sock.close()
|
||||
except Exception as e:
|
||||
print("Error: " + str(e))
|
||||
server.shutdown()
|
||||
sys.exit(1)
|
||||
|
||||
print("Shutting down HTTP server...")
|
||||
print('An Error occurred :', str(e), file=sys.stderr)
|
||||
server.shutdown()
|
||||
sys.exit(1)
|
||||
|
||||
print('Shutting down HTTP server ...')
|
||||
server.shutdown()
|
||||
|
Loading…
x
Reference in New Issue
Block a user