[tor-commits] [ooni-probe/master] Fix the is_public_ipv4_address function

art at torproject.org art at torproject.org
Fri Sep 22 18:41:06 UTC 2017


commit 0a28ada462c62fd3db4c2803036ab25cfdcb68b4
Author: Arturo Filastò <arturo at filasto.net>
Date:   Thu Jan 26 11:38:21 2017 +0000

    Fix the is_public_ipv4_address function
    
    Fixes #727 in ooniprobe
    Bump web_connectivity version
    This bug was introduced in: 4f0c2af37093070e4cec0593a0f57568a4db231c
---
 ooni/common/ip_utils.py                    | 17 +++++++++++------
 ooni/nettests/blocking/web_connectivity.py |  2 +-
 ooni/tests/test_common.py                  | 14 ++++++++++++++
 3 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/ooni/common/ip_utils.py b/ooni/common/ip_utils.py
index afc5bf43..370670b5 100644
--- a/ooni/common/ip_utils.py
+++ b/ooni/common/ip_utils.py
@@ -2,16 +2,21 @@ from ipaddr import IPv4Address, IPv6Address
 from ipaddr import AddressValueError
 
 
-def is_public_ipv4_address(address):
-    return not is_private_ipv4_address(address)
+def in_private_ip_space(address):
+    ip_address = IPv4Address(address)
+    return any(
+        [ip_address.is_private, ip_address.is_loopback]
+    )
 
+def is_public_ipv4_address(address):
+    try:
+        return not in_private_ip_space(address)
+    except AddressValueError:
+        return False
 
 def is_private_ipv4_address(address):
     try:
-        ip_address = IPv4Address(address)
-        return any(
-            [ip_address.is_private, ip_address.is_loopback]
-        )
+        return in_private_ip_space(address)
     except AddressValueError:
         return False
 
diff --git a/ooni/nettests/blocking/web_connectivity.py b/ooni/nettests/blocking/web_connectivity.py
index 629ef1c9..c3877d4a 100644
--- a/ooni/nettests/blocking/web_connectivity.py
+++ b/ooni/nettests/blocking/web_connectivity.py
@@ -48,7 +48,7 @@ class WebConnectivityTest(httpt.HTTPTest, dnst.DNSTest):
                    "connect to the resolved IPs and then fetching the page "
                    "and comparing all these results with those of a control.")
     author = "Arturo Filastò"
-    version = "0.1.0"
+    version = "0.2.0"
 
     contentDecoders = [('gzip', GzipDecoder)]
 
diff --git a/ooni/tests/test_common.py b/ooni/tests/test_common.py
index 1cd77cf4..eb8e2432 100644
--- a/ooni/tests/test_common.py
+++ b/ooni/tests/test_common.py
@@ -1,5 +1,6 @@
 from twisted.trial import unittest
 from ooni.common.http_utils import META_CHARSET_REGEXP
+from ooni.common.ip_utils import is_public_ipv4_address, is_private_ipv4_address
 
 class TestHTTPUtils(unittest.TestCase):
     def test_charset_detection(self):
@@ -17,3 +18,16 @@ class TestHTTPUtils(unittest.TestCase):
         self.assertEqual(META_CHARSET_REGEXP.search(
             with_two_charsets).group(1), 'UTF-8')
         self.assertEqual(META_CHARSET_REGEXP.search(with_empty_charset), None)
+
+class TestIPUtils(unittest.TestCase):
+    def test_is_public_ipv4(self):
+        self.assertTrue(is_public_ipv4_address('8.8.8.8'))
+        self.assertFalse(is_public_ipv4_address('example.com'))
+        self.assertFalse(is_public_ipv4_address('127.0.0.1'))
+        self.assertFalse(is_public_ipv4_address('192.168.1.1'))
+
+    def test_is_private_ipv4(self):
+        self.assertFalse(is_private_ipv4_address('8.8.8.8'))
+        self.assertFalse(is_private_ipv4_address('example.com'))
+        self.assertTrue(is_private_ipv4_address('127.0.0.1'))
+        self.assertTrue(is_private_ipv4_address('192.168.2.2'))





More information about the tor-commits mailing list