[tor-commits] [ooni-probe/master] Add to the report the geoip database version
art at torproject.org
art at torproject.org
Wed Aug 13 18:29:06 UTC 2014
commit 60efdba2d6656a9eab085d97bcad212d6c7c3770
Author: Arturo Filastò <art at fuffa.org>
Date: Thu Aug 7 18:21:31 2014 +0200
Add to the report the geoip database version
This implements: https://trac.torproject.org/projects/tor/ticket/12771
---
ooni/geoip.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++-----
ooni/nettest.py | 4 +++-
2 files changed, 51 insertions(+), 6 deletions(-)
diff --git a/ooni/geoip.py b/ooni/geoip.py
index 53a1f70..d135595 100644
--- a/ooni/geoip.py
+++ b/ooni/geoip.py
@@ -2,12 +2,14 @@ import re
import os
import random
+from hashlib import sha256
+
from twisted.web import client, http_headers
client._HTTP11ClientFactory.noisy = False
-from twisted.internet import reactor, defer, protocol
+from twisted.internet import reactor, defer
-from ooni.utils import log, net, checkForRoot
+from ooni.utils import log, checkForRoot
from ooni import errors
try:
@@ -31,7 +33,7 @@ def IPToLocation(ipaddr):
asn_file = os.path.join(config.advanced.geoip_data_dir, 'GeoIPASNum.dat')
location = {'city': None, 'countrycode': 'ZZ', 'asn': 'AS0'}
-
+
try:
country_dat = GeoIP(country_file)
location['countrycode'] = country_dat.country_code_by_addr(ipaddr)
@@ -55,9 +57,50 @@ def IPToLocation(ipaddr):
log.err("Could not find the ASN for your IP. "
"Download the GeoIPASNum.dat file into the geoip_data_dir"
" or install geoip-database-contrib.")
-
+
return location
+def database_version():
+ from ooni.settings import config
+
+ version = {
+ 'GeoIP': {
+ 'sha256': None,
+ 'timestamp': None,
+ },
+ 'GeoIPASNum': {
+ 'sha256': None,
+ 'timestamp': None
+ },
+ 'GeoLiteCity': {
+ 'sha256': None,
+ 'timestamp': None
+ }
+ }
+
+ geoip_data_dir = config.advanced.get("geoip_data_dir")
+ if not geoip_data_dir:
+ return version
+
+ for key in version.keys():
+ geoip_file = os.path.join(geoip_data_dir, key + ".dat")
+ if not os.path.isfile(geoip_file):
+ continue
+ timestamp = os.stat(geoip_file).st_mtime
+
+ sha256hash = sha256()
+ with open(geoip_file) as f:
+ while True:
+ chunk = f.read(8192)
+ if not chunk:
+ break
+ sha256hash.update(chunk)
+
+ version[key]['timestamp'] = timestamp
+ version[key]['sha256'] = sha256hash.hexdigest()
+ return version
+
+
class HTTPGeoIPLookupper(object):
url = None
@@ -131,7 +174,7 @@ class ProbeIP(object):
'countrycode': 'ZZ',
'ip': '127.0.0.1'
}
-
+
def resolveGeodata(self):
from ooni.settings import config
diff --git a/ooni/nettest.py b/ooni/nettest.py
index eccde78..4cc453d 100644
--- a/ooni/nettest.py
+++ b/ooni/nettest.py
@@ -11,6 +11,7 @@ from twisted.python import usage, reflect
from ooni.tasks import Measurement
from ooni.utils import log, checkForRoot
from ooni.settings import config
+from ooni import geoip
from ooni import errors as e
@@ -228,7 +229,8 @@ class NetTestLoader(object):
'software_name': 'ooniprobe',
'software_version': software_version,
'options': self.options,
- 'input_hashes': input_file_hashes
+ 'input_hashes': input_file_hashes,
+ 'geoip_database_version': geoip.database_version()
}
return test_details
More information about the tor-commits
mailing list