aboutsummaryrefslogtreecommitdiff
path: root/utils/google.py
blob: e8b4114c8f510bac72e0b1b009cd812147fe2682 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python3

import json
import urllib.request
import netaddr

GOOG_URL="https://www.gstatic.com/ipranges/goog.json"
CLOUD_URL="https://www.gstatic.com/ipranges/cloud.json"

def read_url(url):
   try:
      s = urllib.request.urlopen(url).read()
      return json.loads(s)
   except urllib.error.HTTPError:
      print("Invalid HTTP response from %s" % url)
      return {}
   except json.decoder.JSONDecodeError:
      print("Could not parse HTTP response from %s" % url)
      return {}

def main():
   goog_json=read_url(GOOG_URL)
   cloud_json=read_url(CLOUD_URL)

   if goog_json and cloud_json:
#      print("{} published: {}".format(GOOG_URL,goog_json.get('creationTime')))
#      print("{} published: {}".format(CLOUD_URL,cloud_json.get('creationTime')))
      goog_cidrs = netaddr.IPSet()
      for pref in goog_json['prefixes']:
         if pref.get('ipv4Prefix'):
            goog_cidrs.add(pref.get('ipv4Prefix'))
      cloud_cidrs = netaddr.IPSet()
      for pref in cloud_json['prefixes']:
         if pref.get('ipv4Prefix'):
            cloud_cidrs.add(pref.get('ipv4Prefix'))
#      print("IP ranges for Google APIs and services default domains:")
      for i in goog_cidrs.difference(cloud_cidrs).iter_cidrs():
         print(i)

if __name__=='__main__':
   main()