From e971e6a146c7da45cdee9caa12fa6b5778ca8327 Mon Sep 17 00:00:00 2001 From: acidvegas Date: Wed, 23 Aug 2023 19:18:42 -0400 Subject: [PATCH] Initial commit --- massclude.py | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 massclude.py diff --git a/massclude.py b/massclude.py new file mode 100644 index 0000000..e558934 --- /dev/null +++ b/massclude.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +# Massclude - developed by acidvegas in python (https://git.acid.vegas/massclude) + +import ipaddress +import json +import sys +import time +import urllib.request + +def get_bogons(version): + return urllib.request.urlopen(f'https://team-cymru.org/Services/Bogons/fullbogons-ipv{version}.txt').read().decode().split('\n')[2:] + +def get_ixps(version): + latest = time.strftime('%Y%m') + try: + data = urllib.request.urlopen(f'https://publicdata.caida.org/datasets/ixps/ixs_{latest}.jsonl').read().decode() + except: + latest = str(int(time.strftime('%Y%m'))-1) + data = urllib.request.urlopen(f'https://publicdata.caida.org/datasets/ixps/ixs_{latest}.jsonl').read().decode() + decoder = json.JSONDecoder() + objects = [] + for line in data.split('\n'): + if len(line) > 0 and line[0][0] != "#": + objects.append(decoder.decode(line)) + json_data = json.loads(json.dumps(objects)) + return [ip for item in json_data if item['prefixes']['ipv'+version] for ip in item['prefixes']['ipv'+version]] + +donotscan = { + 'bogons' : { + '4': get_bogons('4'), + '6': get_bogons('6') + }, + 'dns_root_servers' : { + '4': [ + '198.41.0.4', # a.root-servers.net Verisign, Inc. + '199.9.14.201', # b.root-servers.net University of Southern California, Information Sciences Institute + '192.33.4.12', # c.root-servers.net Cogent Communications + '199.7.91.13', # d.root-servers.net University of Maryland + '192.203.230.10', # e.root-servers.net NASA (Ames Research Center) + '192.5.5.241', # f.root-servers.net Internet Systems Consortium, Inc. + '192.112.36.4', # g.root-servers.net US Department of Defense (NIC) + '198.97.190.53', # h.root-servers.net US Army (Research Lab) + '192.36.148.17', # i.root-servers.net Netnod + '192.58.128.30', # j.root-servers.net Verisign, Inc. + '193.0.14.129', # k.root-servers.net RIPE NCC + '199.7.83.42', # l.root-servers.net ICANN + '202.12.27.33' # m.root-servers.net WIDE Project + ], + '6': [ + '2001:503:ba3e::2:30', # a.root-servers.net Verisign, Inc. + '2001:500:200::b', # b.root-servers.net University of Southern California, Information Sciences Institute + '2001:500:2::c', # c.root-servers.net Cogent Communications + '2001:500:2d::d', # d.root-servers.net University of Maryland + '2001:500:a8::e', # e.root-servers.net NASA (Ames Research Center) + '2001:500:2f::f', # f.root-servers.net Internet Systems Consortium, Inc. + '2001:500:12::d0d', # g.root-servers.net US Department of Defense (NIC) + '2001:500:1::53', # h.root-servers.net US Army (Research Lab) + '2001:7fe::53', # i.root-servers.net Netnod + '2001:503:c27::2:30', # j.root-servers.net Verisign, Inc. + '2001:7fd::1', # k.root-servers.net RIPE NCC + '2001:500:9f::42', # l.root-servers.net ICANN + '2001:dc3::35' # m.root-servers.net WIDE Project + + ] + }, + 'government': { + '4': [ + '6.0.0.0/8', # Army Information Systems Center + '7.0.0.0/8', # DoD Network Information Center + '11.0.0.0/8', # DoD Intel Information Systems + '21.0.0.0/8', # DDN-RVN + '22.0.0.0/8', # Defense Information Systems Agency + '26.0.0.0/8', # Defense Information Systems Agency + '28.0.0.0/8', # DSI-North + '29.0.0.0/8', # Defense Information Systems Agency + '30.0.0.0/8', # Defense Information Systems Agency + '33.0.0.0/8', # DLA Systems Automation Center + '55.0.0.0/8', # DoD Network Information Center + '205.0.0.0/8', # US-DOD + '214.0.0.0/8', # US-DOD + '215.0.0.0/8' # US-DOD + ] + }, + 'ixps' : { + '4': get_ixps('4'), + '6': get_ixps('6') + } +} + +ip_version = sys.argv[1] +if ip_version == '4': + o_total = ipaddress.IPv4Network('0.0.0.0/0').num_addresses + total = o_total +elif ip_version == '6': + o_total = ipaddress.IPv6Network('::/0').num_addresses + total = o_total +for option in donotscan: + if sys.argv[1] in donotscan[option]: + for ip in donotscan[option][ip_version]: + try: + r_total = ipaddress.ip_network(ip).num_addresses + print(f'Excluding {ip} ({r_total:,} IPs) from {option}') + total -= r_total + except: + print(ip) +print(f'Total IP Addresses : {o_total:,}') +print(f'Total After Clean : {total:,}')