massclude/massclude.py
2023-08-23 19:18:42 -04:00

108 lines
4.1 KiB
Python

#!/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:,}')