def init_my_peer(cls, config, mongo, network): import socket from miniupnpc import UPnP # deploy as an eventlet WSGI server try: raise ValueError('test') sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((config.serve_host, 0)) server_port = sock.getsockname()[1] sock.close() eport = server_port u = UPnP(None, None, 200, 0) u.discover() u.selectigd() r = u.getspecificportmapping(eport, 'TCP') while r is not None and eport < 65536: eport = eport + 1 r = u.getspecificportmapping(eport, 'TCP') b = u.addportmapping(eport, 'TCP', u.lanaddr, server_port, 'UPnP YadaCoin Serve port %u' % eport, '') config.serve_host = '0.0.0.0' config.serve_port = server_port config.peer_host = u.externalipaddress() config.peer_port = server_port except Exception as e: print(e) config.serve_host = config.serve_host config.serve_port = config.serve_port config.peer_host = config.peer_host config.peer_port = config.peer_port print('UPnP failed: you must forward and/or whitelist port', config.peer_port) cls.save_my_peer(config, mongo, network) return cls(config, mongo, config.peer_host, config.peer_port)
def create_upnp_mapping(cls, config): from miniupnpc import UPnP config = get_config() try: u = UPnP(None, None, 200, 0) u.discover() config.igd = u.selectigd() except: config.igd = "" if config.use_pnp: import socket # deploy as an eventlet WSGI server try: server_port = config.peer_port eport = server_port r = u.getspecificportmapping(eport, 'TCP') if r: u.deleteportmapping(eport, 'TCP') u.addportmapping(eport, 'TCP', u.lanaddr, server_port, 'UPnP YadaCoin Serve port %u' % eport, '') config.peer_host = u.externalipaddress() if 'web' in config.modes: server_port = config.serve_port eport = server_port r = u.getspecificportmapping(eport, 'TCP') if r: u.deleteportmapping(eport, 'TCP') u.addportmapping(eport, 'TCP', u.lanaddr, server_port, 'UPnP YadaCoin Serve port %u' % eport, '') except Exception as e: print(e) config.serve_host = config.serve_host config.serve_port = config.serve_port config.peer_host = config.peer_host config.peer_port = config.peer_port print('UPnP failed: you must forward and/or whitelist port', config.peer_port)
from yaml import load, FullLoader from miniupnpc import UPnP import requests # load the configuration file with open('config.yaml') as f: config = load(f, Loader=FullLoader) # use UPnP to get the external IP address upnp = UPnP() upnp.discoverdelay = 200 upnp.discover() upnp.selectigd() ip = upnp.externalipaddress() # set up variables needed for api access api_url = 'https://api.cloudflare.com/client/v4' headers = { 'Authorization': 'Bearer ' + config['api_token'], 'Content-Type': 'application/json' } # get the DNS record so we can save the ID and check the IP url = '{}/zones/{}/dns_records?name={}'.format(api_url, config['zone_id'], config['hostname']) response = requests.get(url, headers=headers).json() if response['result'][0]['content'] == ip: exit
sock.bind((Config.serve_host, 0)) server_port = sock.getsockname()[1] sock.close() eport = server_port u = UPnP(None, None, 200, 0) u.discover() u.selectigd() r = u.getspecificportmapping(eport, 'TCP') while r != None and eport < 65536: eport = eport + 1 r = u.getspecificportmapping(eport, 'TCP') b = u.addportmapping(eport, 'TCP', u.lanaddr, server_port, 'UPnP YadaCoin Serve port %u' % eport, '') Config.serve_host = '0.0.0.0' Config.serve_port = server_port Config.peer_host = u.externalipaddress() Config.peer_port = server_port print "http://{}:{}/".format(u.externalipaddress(), server_port) except: Config.serve_host = Config.serve_host Config.serve_port = Config.serve_port Config.peer_host = Config.peer_host Config.peer_port = Config.peer_port try: res = requests.post('https://yadacoin.io/peers', json.dumps({ 'host': Config.peer_host, 'port': Config.peer_port }), headers={"Content-Type": "application/json"})