Ready to Start Your Career?

External IP Address Search Using Python Source Code

Bmsr256 s profile image
By: Bmsr256
October 18, 2017
This time, I'm providing a Python source code tool designed to fetch your external IP address from the Internet. This is used mostly when you're behind a NAT. It picks your IP randomly from a server list to minimize request overhead on a single server.You need to import re and random libraries for this tool to perfectly run. Here is the source code:`#!/usr/bin/env python"""API Usage=========>>> import ipgetter>>> myip = ipgetter.myip()>>> myip''>>> ipgetter.IPgetter().test()Number of servers: 47IP's : = 47 ocurrencies"""import reimport randomPY3K = version_info >= (3, 0)if PY3K:import urllib.request as urllibelse:import urllib2 as urllib__version__ = "0.4"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 server list to minimize request overheadon a single server.'''def __init__(self):self.server_list = ['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','']def get_externalip(self):'''This function gets your IP from a random server'''myip = ''for i in range(7):myip = self.fetch(random.choice(self.server_list))if myip != '':return myipelse:continuereturn ''def fetch(self, server):'''This function gets your IP from a specific server.'''url = Noneopener = urllib.build_opener()opener.addheaders = [('User-agent',"Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0")]try:url =, timeout=2)content = Didn't want to import chardet. Prefered to stick to stdlibif PY3K:try:content = content.decode('UTF-8')except UnicodeDecodeError:content = content.decode('ISO-8859-1')m ='(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 = myip if len(myip) > 0 else ''except Exception:return ''finally:if url:url.close()def test(self):'''This functions tests the consistency of the serverson 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())` I hope this source code tool can be useful to you. If you have any questions you can contact me on the comments section or send me a message.
Schedule Demo
Build your Cybersecurity or IT Career
Accelerate in your role, earn new certifications, and develop cutting-edge skills using the fastest growing catalog in the industry