Om de locatie van een apparaat nauwkeurig te bepalen moet deze een GPS bevatten. Indien dit niet het geval is, kan je terugvallen op de Geolocatie van het IP-adres. Python heeft daar de pygeoip bibliotheek voor. Naast deze bibliotheek moet je in het bezit zijn van een database die de IP-adressen aan locaties kan koppelen.
De python bibliotheek installeer je met de volgende opdracht:
dany@laptop:~> sudo pip install pygeoip
root's password:
Collecting pygeoip
Downloading pygeoip-0.3.2-py2.py3-none-any.whl
Installing collected packages: pygeoip
Successfully installed pygeoip-0.3.2
You are using pip version 7.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
De database komt van MaxMind. Elke eerste dinsdag van de maand verschijnt een nieuwe versie van de database. De database downloadt je als volgt:
dany@laptop:~> wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
--2017-02-10 16:06:46-- http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
Herleiden van geolite.maxmind.com (geolite.maxmind.com)... 104.16.38.47, 104.16.37.47, 2400:cb00:2048:1::6810:252f, ...
Verbinding maken met geolite.maxmind.com (geolite.maxmind.com)|104.16.38.47|:80... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 11820467 (11M) [application/octet-stream]
Wordt opgeslagen als: ‘GeoLiteCity.dat.gz’
100%[===========================================================================================>] 11.820.467 1,43MB/s in 8,0s
2017-02-10 16:06:54 (1,41 MB/s) - '‘GeoLiteCity.dat.gz’' opgeslagen [11820467/11820467]
Pak de gedownloade database uit met de opdracht:
dany@laptop:~> gzip -d GeoLiteCity.dat.gz
Het externe IP-adres van uw internetverbinding kan je met de volgende opdracht achterhalen en opslaan in een variabele:
dany@laptop:~>wanip=`dig +short myip.opendns.com @resolver1.opendns.com`
dany@laptop:~>echo $wanip
81.242.205.163
Met het python 3 script geolocation.py kan je een IP-adres in de database opzoeken en de bijhorende locatiegegevens weergeven. Het op te zoeken IP-adres wordt daarbij als argument met het python script meegegeven. Het geolocation.py script:
#!/usr/bin/python3.4 import sys import pygeoip # Plaats het als argument meegegeven IP-adres in de variabele ip ip = sys.argv[1] # Zoek de locatie die bij het IP-adres hoort op in de database GeoIPDatabase = '/home/dany/GeoLiteCity.dat' ipData = pygeoip.GeoIP(GeoIPDatabase) record = ipData.record_by_name(ip) # Geef de in de database gevonden locatiegegevens weer op het scherm print("The geolocation for IP Address %s is:" % ip) print("Accurate Location: %s, %s, %s" % (record['city'], record['region_code'], record['country_name'])) print("General Location: %s" % (record['metro_code']))
Start en test het script als volgt met het IP-adres van google.com:
dany@laptop:~> python3.4 geolocation.py 172.217.17.78 The geolocation for IP Address 172.217.17.78 is: Accurate Location: Mountain View, CA, United States General Location: San Francisco, CA
Vanzelfsprekend kan je het python script starten vanuit een bash script, bijvoorbeeld om de locatie het IP-adres van uw computer op te zoeken:
#!/bin/bash wanip=`dig +short myip.opendns.com @resolver1.opendns.com` python3.4 geolocation.py $wanip
Dit wordt het resultaat bij het uitvoeren van van bovenstaande bash script:
dany@laptop:~> bash geolocation.sh
The geolocation for IP Address 81.242.205.163 is:
Accurate Location: None, None, Belgium
General Location: None
Je merkt hier meteen dat de nauwkeurigheid niet erg groot is. Je kunt de locatie van een IP-adres ook uit een webpagina op het internet halen, bijvoorbeeld bij IP Location.