def get_public_ip(self): """Returns the current public IP address. Raises an exception if an issue occurs.""" try: f = urllib.request.urlopen(self.url_page) data = f.read().decode("utf8") f.close() pattern = re.compile('\d+\.\d+\.\d+\.\d+') result = pattern.search(data, 0) if result is None: raise ipretriever.Fault('Service %s failed to return the current public IP address' % self.url_page) else: return result.group(0) except urllib.error.URLError as e: raise ipretriever.Fault(e)
def get_public_ip( self ): """Returns the current public IP address. Raises an exception if an issue occurs.""" try: url_page = 'http://ifconfig.me/ip' public_ip = None f = urllib.request.urlopen(url_page) data = f.read().decode("utf8") f.close() pattern = re.compile('\d+\.\d+\.\d+\.\d+') result = pattern.search(data, 0) if result == None: raise ipretriever.Fault('Service '+url_page+' failed to return the current public IP address') else: public_ip = result.group(0) except urllib.error.URLError as e: raise ipretriever.Fault(e) return public_ip
def get_ip(try_count): logger = logging.getLogger("get_ip") errors = [] for i in range(try_count): try: logger.debug("Loop %d/%d", i + 1, try_count) provider = random.choice(ALL)() logger.debug("Provider : %s" % provider.url_page) ip = provider.get_public_ip() logger.debug("Got ip %s" % provider.url_page) return ip except ipretriever.Fault as e: er = repr(e) logger.error("Fail to get ip : %s", er) errors.append(er) raise ipretriever.Fault("Fail to get ip after %d tries (%s)" % (try_count, ",".join(errors)))