External IP Address Search Using Python Source Code

Profile image for bruno256
October 18, 2017 | Views: 3899

Begin Learning Cyber Security for FREE Now!

FREE REGISTRATIONAlready a Member Login Here

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
‘8.8.8.8’

>>> ipgetter.IPgetter().test()

Number of servers: 47
IP’s :
8.8.8.8 = 47 ocurrencies
“””

import re
import random

PY3K = version_info >= (3, 0)

if PY3K:
import urllib.request as urllib
else:
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 overhead
on a single server.
”’

def __init__(self):
self.server_list = [‘http://ip.dnsexit.com’,
‘http://ifconfig.me/ip’,
‘http://echoip.com’,
‘http://ipecho.net/plain’,
‘http://checkip.dyndns.org/plain’,
‘http://whatismyipaddress.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://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/’,
‘https://wtfismyip.com/text’,
‘http://ipinfo.io/’,
‘http://httpbin.org/ip’,
‘https://diagnostic.opendns.com/myip’,
‘http://checkip.amazonaws.com’,
‘https://api.ipify.org’,
‘https://v4.ident.me’]

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 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, timeout=2)
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())`

 

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.

Share and Earn Cybytes
FacebookTwitterGoogle+LinkedInEmail
Save
+1
3
0
Use Cybytes and
Tip the Author!
Join
Share and Earn
Cybytes
FacebookTwitterGoogle+LinkedInEmail
Ready to share your knowledge and expertise?
Be the Best at Whatever You Do.
We Have the Tools to Get You There.
Visit the NEW Marketplace of Over 500 Skill Enhancement Tools.
Comment on This

You must be logged in to post a comment.

Our Revolution

We believe Cyber Security training should be free, for everyone, FOREVER. Everyone, everywhere, deserves the OPPORTUNITY to learn, begin and grow a career in this fascinating field. Therefore, Cybrary is a free community where people, companies and training come together to give everyone the ability to collaborate in an open source way that is revolutionizing the cyber security educational experience.

Cybrary On The Go

Get the Cybrary app for Android for online and offline viewing of our lessons.

Get it on Google Play
 

Support Cybrary

Donate Here to Get This Month's Donor Badge

 

Cybrary|0P3N

Skip to toolbar

We recommend always using caution when following any link

Are you sure you want to continue?

Continue
Cancel