new: [google-gmail-sending-ips] Add generator and update to latest version
parent
14ee657daf
commit
c9320d8ca9
|
@ -31,6 +31,7 @@ python3 generate-vpn.py
|
||||||
python3 generate-wikimedia.py
|
python3 generate-wikimedia.py
|
||||||
python3 genetate-second-level-tlds.py
|
python3 genetate-second-level-tlds.py
|
||||||
python3 generate-google-gcp.py
|
python3 generate-google-gcp.py
|
||||||
|
python3 generate-google-gmail-sending-ips.py
|
||||||
popd
|
popd
|
||||||
|
|
||||||
./jq_all_the_things.sh
|
./jq_all_the_things.sh
|
||||||
|
|
|
@ -1,11 +1,18 @@
|
||||||
{
|
{
|
||||||
"description": "List of known gmail sending IP ranges (https://support.google.com/a/answer/27642?hl=en)",
|
"description": "List of known Gmail sending IP ranges (https://support.google.com/a/answer/27642?hl=en)",
|
||||||
"list": [
|
"list": [
|
||||||
"108.177.8.0/21",
|
"108.177.8.0/21",
|
||||||
|
"108.177.96.0/19",
|
||||||
|
"130.211.0.0/22",
|
||||||
"172.217.0.0/19",
|
"172.217.0.0/19",
|
||||||
|
"172.217.128.0/19",
|
||||||
|
"172.217.160.0/20",
|
||||||
|
"172.217.192.0/19",
|
||||||
|
"172.217.32.0/20",
|
||||||
|
"172.253.112.0/20",
|
||||||
|
"172.253.56.0/21",
|
||||||
"173.194.0.0/16",
|
"173.194.0.0/16",
|
||||||
"2001:4860:4000::/36",
|
"2001:4860:4000::/36",
|
||||||
"207.126.144.0/20",
|
|
||||||
"209.85.128.0/17",
|
"209.85.128.0/17",
|
||||||
"216.239.32.0/19",
|
"216.239.32.0/19",
|
||||||
"216.58.192.0/19",
|
"216.58.192.0/19",
|
||||||
|
@ -14,7 +21,8 @@
|
||||||
"2800:3f0:4000::/36",
|
"2800:3f0:4000::/36",
|
||||||
"2a00:1450:4000::/36",
|
"2a00:1450:4000::/36",
|
||||||
"2c0f:fb50:4000::/36",
|
"2c0f:fb50:4000::/36",
|
||||||
"64.18.0.0/20",
|
"35.190.247.0/24",
|
||||||
|
"35.191.0.0/16",
|
||||||
"64.233.160.0/19",
|
"64.233.160.0/19",
|
||||||
"66.102.0.0/20",
|
"66.102.0.0/20",
|
||||||
"66.249.80.0/20",
|
"66.249.80.0/20",
|
||||||
|
@ -22,11 +30,11 @@
|
||||||
"74.125.0.0/16"
|
"74.125.0.0/16"
|
||||||
],
|
],
|
||||||
"matching_attributes": [
|
"matching_attributes": [
|
||||||
"ip-dst",
|
|
||||||
"ip-src",
|
"ip-src",
|
||||||
|
"ip-dst",
|
||||||
"domain|ip"
|
"domain|ip"
|
||||||
],
|
],
|
||||||
"name": "List of known gmail sending IP ranges",
|
"name": "List of known Gmail sending IP ranges",
|
||||||
"type": "cidr",
|
"type": "cidr",
|
||||||
"version": 20190809
|
"version": 20210610
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from ipaddress import ip_network, IPv4Network, IPv6Network
|
||||||
|
from dns.resolver import Resolver
|
||||||
|
from typing import List, Union
|
||||||
|
from generator import get_version, write_to_file
|
||||||
|
|
||||||
|
|
||||||
|
class Spf:
|
||||||
|
def _parse_spf(self, spf: str) -> dict:
|
||||||
|
output = {"include": [], "ranges": []}
|
||||||
|
for part in spf.split(" "):
|
||||||
|
if part.startswith("include:"):
|
||||||
|
output["include"].append(part.split(":", 1)[1])
|
||||||
|
elif part.startswith("ip4:") or part.startswith("ip6:"):
|
||||||
|
output["ranges"].append(ip_network(part.split(":", 1)[1]))
|
||||||
|
return output
|
||||||
|
|
||||||
|
def _query_spf(self, resolver: Resolver, domain: str) -> List[Union[IPv4Network, IPv6Network]]:
|
||||||
|
ranges = []
|
||||||
|
for rdata in resolver.query(domain, "TXT"):
|
||||||
|
parsed = self._parse_spf(rdata.to_text())
|
||||||
|
ranges += parsed["ranges"]
|
||||||
|
|
||||||
|
for include in parsed["include"]:
|
||||||
|
ranges += self._query_spf(resolver, include)
|
||||||
|
|
||||||
|
return ranges
|
||||||
|
|
||||||
|
def get_list(self, domain: str) -> List[Union[IPv4Network, IPv6Network]]:
|
||||||
|
resolver = Resolver()
|
||||||
|
return self._query_spf(resolver, domain)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
spf = Spf()
|
||||||
|
print()
|
||||||
|
|
||||||
|
warninglist = {
|
||||||
|
'name': "List of known Gmail sending IP ranges",
|
||||||
|
'version': get_version(),
|
||||||
|
'description': "List of known Gmail sending IP ranges (https://support.google.com/a/answer/27642?hl=en)",
|
||||||
|
'matching_attributes': ["ip-src", "ip-dst", "domain|ip"],
|
||||||
|
'type': 'cidr',
|
||||||
|
'list': [str(range) for range in spf.get_list("_spf.google.com")],
|
||||||
|
}
|
||||||
|
|
||||||
|
write_to_file(warninglist, "google-gmail-sending-ips")
|
Loading…
Reference in New Issue