mirror of https://github.com/rscmbbng/Border-Check
rscmbbng
11 years ago
1 changed files with 73 additions and 0 deletions
@ -0,0 +1,73 @@ |
|||
#!/usr/bin/python |
|||
|
|||
import sqlite3, os, time, pygeoip,re |
|||
from urlparse import urlparse |
|||
import subprocess, socket |
|||
|
|||
|
|||
|
|||
|
|||
def getURL(): |
|||
## function to get the last visited URL from the browser history database. This is only for Firefox. |
|||
## However the Chrome database works in a similar way, just with different tables. I believe it's not to hard |
|||
## to produce a function like this for every browser. The difficulty would be for a user to give the path to the |
|||
## history file. |
|||
|
|||
conn = sqlite3.connect('path/to/firefox/places.sqlite') |
|||
c = conn.cursor() |
|||
c.execute('select url, last_visit_date from moz_places ORDER BY last_visit_date DESC') |
|||
url = c.fetchone() |
|||
return url[0] |
|||
|
|||
|
|||
|
|||
## Location of the GeoIP database. Currently using this one: http://dev.maxmind.com/geoip/legacy/geolite/ |
|||
## Perhaps better databases are available. |
|||
geoip= pygeoip.GeoIP('path/to/geoipdatabase.dat') |
|||
|
|||
old_url="" |
|||
|
|||
## the main loop, always running, checks once in 5 seconds if there is a new URL in the browser history. |
|||
while True: |
|||
|
|||
## get the URL from the browser history, strip it down to the host, convert that to ip adress. |
|||
url = urlparse(getURL()).netloc |
|||
# url = url.replace('www.','') --> doing a tracert to for example.com and www.example.com yields different results most of the times. |
|||
url_ip = socket.gethostbyname(url) |
|||
if url != old_url: |
|||
count = 0 |
|||
print url |
|||
|
|||
## Run LFT (layer four traceroute) on the ip as a subprocess and pipe back into script. |
|||
## In NL this has worked flawlessly for me |
|||
## however since i'm in the Laboral all tracerts using TCP fail and the one with UDP find a path, but |
|||
## fail to reach the destination. Perhaps it has to do with the network configuration here, but we should |
|||
## look into it. |
|||
|
|||
#a = subprocess.Popen(['lft', '-S', '-n', '-e', url_ip], stdout=subprocess.PIPE) -> using tcp |
|||
a = subprocess.Popen(['lft', '-S', '-n', '-u', url_ip], stdout=subprocess.PIPE) # -> using udp |
|||
logfile = open('logfile', 'a') |
|||
|
|||
for line in a.stdout: |
|||
#log results. |
|||
logfile.write(line) |
|||
|
|||
## Parsing the results from LFT. If it finds an ip adress compare it against the database and print the results |
|||
parts = line.split() |
|||
for ip in parts: |
|||
if re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$",ip): |
|||
record = geoip.record_by_addr(ip) |
|||
#print record |
|||
if record.has_key('country_name') and record['city'] is not '': |
|||
country = record['country_name'] |
|||
city = record['city'] |
|||
print count, "While surfing you got to "+ip+" which is in "+city+", "+country |
|||
elif record.has_key('country_name'): |
|||
country = record['country_name'] |
|||
print count, "While surfing you got to "+ip+" which is in "+country |
|||
time.sleep(0.1) |
|||
count+=1 |
|||
old_url = url |
|||
print"old url =",old_url |
|||
logfile.close() |
|||
time.sleep(5) |
Loading…
Reference in new issue