kopia lustrzana https://github.com/ogre/habboy
200 wiersze
5.5 KiB
Python
200 wiersze
5.5 KiB
Python
#!/usr/bin/env python
|
|
import string
|
|
import subprocess
|
|
import socket
|
|
import datetime
|
|
import re
|
|
import random
|
|
|
|
from sys import version_info
|
|
|
|
PY3K = version_info >= (3, 0)
|
|
|
|
if PY3K:
|
|
import urllib.request as urllib
|
|
else:
|
|
import urllib2 as urllib
|
|
|
|
__version__ = "0.6"
|
|
|
|
|
|
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://www.my-ip-address.net/',
|
|
'http://myexternalip.com/raw',
|
|
'http://www.canyouseeme.org/',
|
|
'http://www.trackip.net/',
|
|
'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)
|
|
|
|
# Change to your own account information
|
|
|
|
# Very Linux Specific
|
|
def get_ip():
|
|
arg='ip route list'
|
|
p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE)
|
|
data = p.communicate()
|
|
split_data = data[0].split()
|
|
ipaddr = split_data[split_data.index('src')+1]
|
|
return ipaddr
|
|
|
|
def get_local_ips():
|
|
arg='ip route list'
|
|
p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE)
|
|
data = p.communicate()
|
|
split_data = data[0].split()
|
|
# ipaddr = split_data[split_data.index('src')+1]
|
|
res = []
|
|
for i in xrange(len(split_data)):
|
|
if split_data[i] == 'src':
|
|
res.append(split_data[i+1])
|
|
return res
|
|
|
|
def send_to_www(IP):
|
|
H = socket.gethostname()
|
|
url = 'http://cgarea.com/ip/ip.php?HOST=%s&IP=%s' % (H, IP)
|
|
print url
|
|
|
|
hdr = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
|
'Accept-Encoding': 'gzip, deflate, sdch',
|
|
'Accept-Language': 'pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4',
|
|
'Cache-Control': 'max-age=0',
|
|
'Connection': 'keep-alive',
|
|
'Upgrade-Insecure-Requests': '1',
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
|
|
}
|
|
req = urllib.Request(url, headers = hdr)
|
|
urllib.urlopen( req )
|
|
|
|
if __name__ == '__main__':
|
|
ip = str( datetime.datetime.now() ).replace(' ', '|')
|
|
# ip += '|' + get_ip()
|
|
ip += '|' + string.join( get_local_ips(), '|')
|
|
ip += '|' + myip()
|
|
try:
|
|
send_to_www(ip)
|
|
except:
|
|
import traceback
|
|
print traceback.format_exc()
|
|
pass
|
|
print ip
|
|
|
|
|