IPgetter
Publicado por Fernando (última atualização em 02/05/2014)
[ Hits: 7.739 ]
Homepage: https://github.com/phoemur/
Este módulo foi feito para pegar seu IP externo pela internet. É usado principalmente quando atrás de um proxy ou NAT.
Ele pega o IP usando um servidor aleatório de uma lista de servidores, para minimizar as requisições em um servidor específico.
Se gostar você pode instalar o módulo em:
https://pypi.python.org/pypi/ipgetter/
Ou contribuir no GitHub em:
https://github.com/phoemur/ipgetter
#!/usr/bin/env python
"""
This module is designed to fetch your external IP address from the internet.
It is used mostly when behind a NAT.
It picks your IP randomly from a serverlist to minimize request
overhead on a single server
If you want to add or remove your server from the list contact me on github
API Usage
=========
>>> import ipgetter
>>> myip = ipgetter.myip()
>>> myip
'8.8.8.8'
>>> ipgetter.IPgetter().test()
Number of servers: 47
IP's :
8.8.8.8 = 47 ocurrencies
"""
import re
import random
import signal
from sys import version_info
from functools import wraps
PY3K = version_info >= (3, 0)
if PY3K:
import urllib.request as urllib
else:
import urllib2 as urllib
__version__ = "0.4"
def timeout(seconds, error_message='Function call timed out'):
'''
Decorator that provides timeout to a function
'''
def decorated(func):
def _handle_timeout(signum, frame):
raise TimeoutError(error_message)
@wraps(func)
def wrapper(*args, **kwargs):
signal.signal(signal.SIGALRM, _handle_timeout)
signal.alarm(seconds)
try:
result = func(*args, **kwargs)
finally:
signal.alarm(0)
return result
return wrapper
return decorated
@timeout(120)
def myip():
return IPgetter().get_externalip()
class IPgetter(object):
'''
This class is designed to fetch your external IP address from the internet.
It is used mostly when behind a NAT.
It picks your IP randomly from a serverlist to minimize request overhead
on a single server
'''
def __init__(self):
self.server_list = ['http://ip.dnsexit.com',
'http://ifconfig.me/ip',
'http://ipecho.net/plain',
'http://checkip.dyndns.org/plain',
'http://ipogre.com/linux.php',
'http://whatismyipaddress.com/',
'http://ip.my-proxy.com/',
'http://websiteipaddress.com/WhatIsMyIp',
'http://getmyipaddress.org/',
'http://showmyipaddress.com/',
'http://www.my-ip-address.net/',
'http://myexternalip.com/raw',
'http://www.canyouseeme.org/',
'http://www.trackip.net/',
'http://myip.dnsdynamic.org/',
'http://icanhazip.com/',
'http://www.iplocation.net/',
'http://www.howtofindmyipaddress.com/',
'http://www.ipchicken.com/',
'http://whatsmyip.net/',
'http://www.ip-adress.com/',
'http://checkmyip.com/',
'http://www.tracemyip.org/',
'http://checkmyip.net/',
'http://www.lawrencegoetz.com/programs/ipinfo/',
'http://www.findmyip.co/',
'http://ip-lookup.net/',
'http://www.dslreports.com/whois',
'http://www.mon-ip.com/en/my-ip/',
'http://www.myip.ru',
'http://ipgoat.com/',
'http://www.myipnumber.com/my-ip-address.asp',
'http://www.whatsmyipaddress.net/',
'http://formyip.com/',
'https://check.torproject.org/',
'http://www.displaymyip.com/',
'http://www.bobborst.com/tools/whatsmyip/',
'http://www.geoiptool.com/',
'https://www.whatsmydns.net/whats-my-ip-address.html',
'https://www.privateinternetaccess.com/pages/whats-my-ip/',
'http://checkip.dyndns.com/',
'http://myexternalip.com/',
'http://www.ip-adress.eu/',
'http://www.infosniper.net/',
'http://wtfismyip.com/',
'http://ipinfo.io/',
'http://httpbin.org/ip']
def get_externalip(self):
'''
This function gets your IP from a random server
'''
random.shuffle(self.server_list)
myip = ''
for server in self.server_list:
myip = self.fetch(server)
if myip != '':
return myip
else:
continue
return ''
def fetch(self, server):
'''
This function gets your IP from a specific server
'''
url = None
opener = urllib.build_opener()
opener.addheaders = [('User-agent',
"Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0")]
try:
url = opener.open(server)
content = url.read()
# Didn't want to import chardet. Prefered to stick to stdlib
if PY3K:
try:
content = content.decode('UTF-8')
except UnicodeDecodeError:
content = content.decode('ISO-8859-1')
m = re.search(
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)',
content)
myip = m.group(0)
return myip if len(myip) > 0 else ''
except Exception:
return ''
finally:
if url:
url.close()
def test(self):
'''
This functions tests the consistency of the servers
on the list when retrieving your IP.
All results should be the same.
'''
resultdict = {}
for server in self.server_list:
resultdict.update(**{server: self.fetch(server)})
ips = sorted(resultdict.values())
ips_set = set(ips)
print('\nNumber of servers: {}'.format(len(self.server_list)))
print("IP's :")
for ip, ocorrencia in zip(ips_set, map(lambda x: ips.count(x), ips_set)):
print('{0} = {1} ocurrenc{2}'.format(ip if len(ip) > 0 else 'broken server', ocorrencia, 'y' if ocorrencia == 1 else 'ies'))
print('\n')
print(resultdict)
if __name__ == '__main__':
print(myip())
Cliente/Servidor Usando Python
hcoin - Preço do Dólar, Bitcoin e Euro em Python
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (2)
O programa assinador digital (3)
Warcraft II Remastered no Linux? (2)









