コード例 #1
0
	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)
コード例 #2
0
ファイル: adapter.py プロジェクト: yultreuse/gandyn
  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
コード例 #3
0
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)))