Merge pull request #1 from SuperDuperRob/master
Many tweaks and improvements :)
This commit is contained in:
6 files changed
+53
-80
No files matched your search
@@ -1,61 +1,47 @@
|
|||||||
# sudomemoDNS
|

|
||||||
|
### This server will allow you to connect to Sudomemo when your Internet Service Provider does not work with custom DNS.
|
||||||
This server will allow you to connect to Sudomemo when
|
|
||||||
your Internet Service Provider does not work with custom DNS.
|
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
The setup process does not differ from what is shown at
|
The setup process does not differ from what is shown at https://flipnot.es/setup except for the values to enter in your custom DNS settings.
|
||||||
https://support.sudomemo.net/setup except for the values
|
First, make sure that your console is connected to the same network as this computer.
|
||||||
to enter in your custom DNS settings.
|
Please submit any issues to Sudomemo Support.
|
||||||
|
|
||||||
First, make sure that your Nintendo DSi is connected to the
|
## Running on Windows:
|
||||||
same network as this computer.
|
|
||||||
|
|
||||||
This is the initial release of sudomemoDNS. Please submit any issues to Sudomemo Support.
|
|
||||||
|
|
||||||
# Running on Windows:
|
|
||||||
|
|
||||||
Run the .exe provided in this release. You may have to click past a warning from Windows SmartScreen (as it sometimes turns its nose up at applications bundled by PyInstaller) or your firewall (as it needs to listen for DNS requests).
|
Run the .exe provided in this release. You may have to click past a warning from Windows SmartScreen (as it sometimes turns its nose up at applications bundled by PyInstaller) or your firewall (as it needs to listen for DNS requests).
|
||||||
|
|
||||||
# Running on anything else:
|
## Running on anything else:
|
||||||
|
|
||||||
Required packages (installable with pip): requests, dnslib
|
Required packages (installable with pip): requests, dnslib
|
||||||
Required Python version: 3+, tested with 3.6
|
Required Python version: 3+, tested with 3.6
|
||||||
|
|
||||||
sudo <name of your python binary> sudomemoDNS.py
|
sudo <name of your python binary> sudomemoDNS.py
|
||||||
|
|
||||||
# What you'll see when it starts up
|
## What you'll see when it starts up
|
||||||
|
|
||||||
The following will display when you start it up:
|
The following will display when you start it up:
|
||||||
|
|
||||||
+===============================+
|
+===============================+
|
||||||
| Sudomemo DNS Server |
|
| Sudomemo DNS Server |
|
||||||
| Version 1.0 |
|
| Version 1.1 |
|
||||||
+===============================+
|
+===============================+
|
||||||
|
|
||||||
Hello! This server will allow you to connect to Sudomemo when
|
== Welcome to sudomemoDNS! ==
|
||||||
your Internet Service Provider does not work with custom DNS.
|
This server will allow you to connect to Sudomemo when your Internet Service Provider does
|
||||||
|
not work with custom DNS.
|
||||||
|
|
||||||
#### How To Use ####
|
== How To Use ==
|
||||||
|
First, make sure that your console is connected to the same network as this computer.
|
||||||
|
|
||||||
The setup process does not differ from what is shown at
|
Then, put these settings in for DNS on your console:
|
||||||
https://support.sudomemo.net/setup except for the values
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
to enter in your custom DNS settings.
|
Primary DNS: XXX.XXX.XXX.XXX (NOTE: This value will be unique when you run the program)
|
||||||
|
|
||||||
First, make sure that your Nintendo DSi is connected to the
|
|
||||||
same network as this computer.
|
|
||||||
|
|
||||||
Here are the settings you will put in for DNS on your Nintendo DSi:
|
|
||||||
|
|
||||||
Primary DNS: XX.XX.XX.XX (NOTE: this value will be unique when you run the program)
|
|
||||||
Secondary DNS: 8.8.8.8
|
Secondary DNS: 8.8.8.8
|
||||||
All other settings should match what is shown at the above URL.
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
#### Getting Help ####
|
|
||||||
|
|
||||||
Need help? Visit our Discord server or check out https://support.sudomemo.net.
|
|
||||||
|
|
||||||
|
== Getting Help ==
|
||||||
|
Need help? Visit our Discord server or check out https://support.sudomemo.net
|
||||||
|
|
||||||
When entering your DNS settings, if the Primary DNS is displayed like this (this is an example):
|
When entering your DNS settings, if the Primary DNS is displayed like this (this is an example):
|
||||||
|
|
||||||
@@ -65,10 +51,9 @@ then you can enter it as follows:
|
|||||||
|
|
||||||
192.168.001.007
|
192.168.001.007
|
||||||
|
|
||||||
|
## Building on Windows
|
||||||
|
|
||||||
# Building on Windows
|
Install dnslib, requests, and pyinstaller via pip, then modify the paths in the spec file to where sudomemoDNS and the sudomemoDNS icon is stored.
|
||||||
|
Then, run the following as an administrator:
|
||||||
|
|
||||||
Install dnslib and requests via pip (as well as pyinstaller) and then build with pyinstaller:
|
pyinstaller.exe sudomemoDNS_v1.1.spec
|
||||||
|
|
||||||
C:\Users\Administrator\sudomemo-dns>C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts\pyinstaller.exe sud
|
|
||||||
omemoDNS_v1.0.spec
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 131 KiB |
+26
-38
@@ -1,5 +1,5 @@
|
|||||||
# sudomemoDNS v1.0
|
# sudomemoDNS v1.1
|
||||||
# (c) 2019 Austin Burk/Sudomemo
|
# (c) 2019-2020 Austin Burk / Team Sudomemo
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -18,7 +18,7 @@ def get_platform():
|
|||||||
platforms = {
|
platforms = {
|
||||||
'linux1' : 'Linux',
|
'linux1' : 'Linux',
|
||||||
'linux2' : 'Linux',
|
'linux2' : 'Linux',
|
||||||
'darwin' : 'OS X',
|
'darwin' : 'macOS',
|
||||||
'win32' : 'Windows'
|
'win32' : 'Windows'
|
||||||
}
|
}
|
||||||
if sys.platform not in platforms:
|
if sys.platform not in platforms:
|
||||||
@@ -26,7 +26,7 @@ def get_platform():
|
|||||||
|
|
||||||
return platforms[sys.platform]
|
return platforms[sys.platform]
|
||||||
|
|
||||||
SUDOMEMODNS_VERSION = "1.0"
|
SUDOMEMODNS_VERSION = "1.1"
|
||||||
|
|
||||||
def get_ip():
|
def get_ip():
|
||||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
@@ -49,27 +49,22 @@ print("| Sudomemo DNS Server |")
|
|||||||
print("| Version " + SUDOMEMODNS_VERSION + " |")
|
print("| Version " + SUDOMEMODNS_VERSION + " |")
|
||||||
print("+===============================+\n")
|
print("+===============================+\n")
|
||||||
|
|
||||||
print("Hello! This server will allow you to connect to Sudomemo when")
|
print("== Welcome to sudomemoDNS! ==")
|
||||||
print("your Internet Service Provider does not work with custom DNS.\n")
|
print("This server will allow you to connect to Sudomemo when your Internet Service Provider does not work with custom DNS.\n")
|
||||||
|
|
||||||
print("#### How To Use ####\n")
|
print("== How To Use ==")
|
||||||
print("The setup process does not differ from what is shown at")
|
print("First, make sure that your console is connected to the same network as this computer.\n")
|
||||||
print("https://support.sudomemo.net/setup except for the values")
|
|
||||||
print("to enter in your custom DNS settings.\n")
|
|
||||||
|
|
||||||
print("First, make sure that your Nintendo DSi is connected to the")
|
print("Then, put these settings in for DNS on your console:")
|
||||||
print("same network as this computer.")
|
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
|
||||||
|
|
||||||
print("\nHere are the settings you will put in for DNS on your Nintendo DSi:\n")
|
|
||||||
print("Primary DNS: ",MY_IP)
|
print("Primary DNS: ",MY_IP)
|
||||||
print("Secondary DNS: 8.8.8.8")
|
print("Secondary DNS: 8.8.8.8")
|
||||||
|
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n")
|
||||||
|
|
||||||
print("All other settings should match what is shown at the above URL.\n")
|
print("== Getting Help ==")
|
||||||
|
print("Need help? Visit our Discord server or check out https://support.sudomemo.net\n")
|
||||||
|
|
||||||
print("#### Getting Help ####\n")
|
print("[INFO] Starting sudomemoDNS...")
|
||||||
print("Need help? Visit our Discord server or check out https://support.sudomemo.net.\n")
|
|
||||||
|
|
||||||
print("[INFO] Starting up")
|
|
||||||
|
|
||||||
TYPE_LOOKUP = {
|
TYPE_LOOKUP = {
|
||||||
A: QTYPE.A,
|
A: QTYPE.A,
|
||||||
@@ -89,17 +84,16 @@ class SudomemoDNSLogger(object):
|
|||||||
def log_send(self, handler, data):
|
def log_send(self, handler, data):
|
||||||
pass
|
pass
|
||||||
def log_request(self, handler, request):
|
def log_request(self, handler, request):
|
||||||
print("[INFO] Received DNS request from DSi at " + handler.client_address[0])
|
print("[INFO] Received DNS request from console at " + handler.client_address[0])
|
||||||
def log_reply(self, handler, reply):
|
def log_reply(self, handler, reply):
|
||||||
print("[INFO] Sent response to DSi at " + handler.client_address[0])
|
print("[INFO] Sent response to console at " + handler.client_address[0])
|
||||||
def log_error(self, handler, e):
|
def log_error(self, handler, e):
|
||||||
logger.error("[INFO] Invalid DNS request from " + handler.client_address[0])
|
print("[ERROR] Invalid DNS request from " + handler.client_address[0])
|
||||||
def log_truncated(self, handler, reply):
|
def log_truncated(self, handler, reply):
|
||||||
pass
|
pass
|
||||||
def log_data(self, dnsobj):
|
def log_data(self, dnsobj):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Record:
|
class Record:
|
||||||
def __init__(self, rdata_type, *args, rtype=None, rname=None, ttl=None, **kwargs):
|
def __init__(self, rdata_type, *args, rtype=None, rname=None, ttl=None, **kwargs):
|
||||||
if isinstance(rdata_type, RD):
|
if isinstance(rdata_type, RD):
|
||||||
@@ -154,17 +148,15 @@ ZONES = {}
|
|||||||
try:
|
try:
|
||||||
get_zones = requests.get("https://www.sudomemo.net/api/dns_zones.json", headers={'User-Agent': 'SudomemoDNS/' + SUDOMEMODNS_VERSION + ' (' + get_platform() + ')'})
|
get_zones = requests.get("https://www.sudomemo.net/api/dns_zones.json", headers={'User-Agent': 'SudomemoDNS/' + SUDOMEMODNS_VERSION + ' (' + get_platform() + ')'})
|
||||||
except requests.exceptions.Timeout:
|
except requests.exceptions.Timeout:
|
||||||
print("[ERROR] Couldn't load DNS data: connection to Sudomemo timed out.")
|
print("[ERROR] Unable to load DNS data: Connection to Sudomemo timed out. Are you connected to the Internet?")
|
||||||
print("[ERROR] Are you connected to the Internet?")
|
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
print("[ERROR] Couldn't load DNS data.")
|
print("[ERROR] Unable load DNS data.")
|
||||||
print("[ERROR] Exception: ",e)
|
print("[ERROR] Exception: ",e)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
try:
|
try:
|
||||||
zones = json.loads(get_zones.text)
|
zones = json.loads(get_zones.text)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print("[ERROR] Couldn't load DNS data: invalid response from server")
|
print("[ERROR] Unable load DNS data: Invalid response from server. Check that you can visit sudomemo.net")
|
||||||
print("[ERROR] Check that you can visit sudomemo.net")
|
|
||||||
|
|
||||||
for zone in zones:
|
for zone in zones:
|
||||||
if zone["type"] == "a":
|
if zone["type"] == "a":
|
||||||
@@ -203,21 +195,19 @@ class Resolver:
|
|||||||
resolver = Resolver()
|
resolver = Resolver()
|
||||||
dnsLogger = SudomemoDNSLogger()
|
dnsLogger = SudomemoDNSLogger()
|
||||||
|
|
||||||
print("[INFO] Detected operating system:", get_platform());
|
print("[INFO] Detected operating system:", get_platform())
|
||||||
|
|
||||||
if get_platform() == 'linux':
|
if get_platform() == 'linux':
|
||||||
print("[INFO] Please note that you will have to run this as root or with permissions to bind to UDP port 53.")
|
print("[INFO] Please note that you will have to run this as root or with permissions to bind to UDP port 53.")
|
||||||
print("[INFO] If you aren't seeing any requests, check that this is the case first with lsof -i:53 (requires lsof)")
|
print("[INFO] If you aren't seeing any requests, check that this is the case first with lsof -i:53 (requires lsof)")
|
||||||
print("[INFO] To run as root, prefix the command with 'sudo'")
|
print("[INFO] To run as root, prefix the command with 'sudo'")
|
||||||
elif get_platform() == 'OS X':
|
elif get_platform() == 'macOS':
|
||||||
print("[INFO] Please note that you will have to run this as root or with permissions to bind to UDP port 53.")
|
print("[INFO] Please note that you will have to run this as root or with permissions to bind to UDP port 53.")
|
||||||
print("[INFO] If you aren't seeing any requests, check that this is the case first with lsof -i:53 (requires lsof)")
|
print("[INFO] If you aren't seeing any requests, check that this is the case first with lsof -i:53 (requires lsof)")
|
||||||
print("[INFO] To run as root, prefix the command with 'sudo'")
|
print("[INFO] To run as root, prefix the command with 'sudo'")
|
||||||
elif get_platform() == 'Windows':
|
elif get_platform() == 'Windows':
|
||||||
print("[INFO] Please note: On Windows, you may have to allow this application through")
|
print("[INFO] Please note that you may have to allow this application through the firewall. If so, a popup will appear in a moment.")
|
||||||
print("[INFO] the firewall. If so, a popup will appear in a moment.")
|
print("[INFO] If you are not seeing any requests, make sure you have allowed this application through the firewall. If you have already done so, disregard this message.")
|
||||||
print("[INFO] If you aren't seeing any requests, make sure you have done so first.")
|
|
||||||
print("[INFO] Disregard this message if you have already done so.")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
servers = [
|
servers = [
|
||||||
@@ -225,13 +215,11 @@ try:
|
|||||||
DNSServer(resolver=resolver, port=53, address=MY_IP, tcp=False, logger=dnsLogger),
|
DNSServer(resolver=resolver, port=53, address=MY_IP, tcp=False, logger=dnsLogger),
|
||||||
]
|
]
|
||||||
except PermissionError:
|
except PermissionError:
|
||||||
print("[ERROR] Permission error: check that you are running this as Administrator or root")
|
print("[ERROR] Permission error: Check that you are running this as an administrator or root")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
print("[INFO] Starting Sudomemo DNS server.")
|
print("[INFO] sudomemoDNS is ready. Now waiting for DNS requests from your console...")
|
||||||
|
|
||||||
print("[INFO] Now waiting for DNS requests from your Nintendo DSi System.")
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
for s in servers:
|
for s in servers:
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 117 KiB |
@@ -4,7 +4,7 @@ block_cipher = None
|
|||||||
|
|
||||||
|
|
||||||
a = Analysis(['sudomemoDNS.py'],
|
a = Analysis(['sudomemoDNS.py'],
|
||||||
pathex=['C:\\Users\\Administrator\\sudomemo-dns'],
|
pathex=['C:\\PATH\\TO\\SUDOMEMODNS'],
|
||||||
binaries=[],
|
binaries=[],
|
||||||
datas=[],
|
datas=[],
|
||||||
hiddenimports=[],
|
hiddenimports=[],
|
||||||
@@ -23,10 +23,10 @@ exe = EXE(pyz,
|
|||||||
a.zipfiles,
|
a.zipfiles,
|
||||||
a.datas,
|
a.datas,
|
||||||
[],
|
[],
|
||||||
name='sudomemoDNS_v1.0',
|
name='sudomemoDNS_v1.1',
|
||||||
debug=False,
|
debug=False,
|
||||||
bootloader_ignore_signals=False,
|
bootloader_ignore_signals=False,
|
||||||
strip=False,
|
strip=False,
|
||||||
upx=True,
|
upx=True,
|
||||||
runtime_tmpdir=None,
|
runtime_tmpdir=None,
|
||||||
console=True , icon='C:\\Users\\Administrator\\sudomemo-dns\\sudomemo.ico')
|
console=True , icon='C:\\PATH\\TO\\SUDOMEMODNS\\ICON.ico')
|
||||||
Reference in new issue
Block a user
