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