Skip to content

Commit 60ebc59

Browse files
committed
add asn-csv-lists
1 parent 98d18bf commit 60ebc59

File tree

4 files changed

+61
-10
lines changed

4 files changed

+61
-10
lines changed

src/riskdb/builder/enrich_data.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@
2929
dns_resolver.nameservers = PTR_NAMESERVERS
3030

3131

32+
def load_lookup_list_asn() -> dict:
33+
# source: https://github.com/O-X-L/geoip-asn
34+
with open(ASN_JSON_FILE, 'r', encoding='utf-8') as f:
35+
return json_loads(f.read())
36+
37+
3238
def load_lookup_lists() -> dict:
3339
lookup_lists = {}
3440
tor_exit_node_file = '/tmp/tor_exit_nodes.txt'
@@ -45,9 +51,7 @@ def load_lookup_lists() -> dict:
4551
except AddressValueError:
4652
continue
4753

48-
# source: https://github.com/O-X-L/geoip-asn
49-
with open(ASN_JSON_FILE, 'r', encoding='utf-8') as f:
50-
lookup_lists['asn'] = json_loads(f.read())
54+
lookup_lists['asn'] = load_lookup_list_asn()
5155

5256
# creation of these files has yet to be automated
5357
for k, v in KIND_FILES.items():

src/riskdb/lister/kind.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
from datetime import datetime, timedelta
77

88
from riskdb.builder.util import log
9-
from riskdb.lister.util import write_list
9+
from riskdb.builder.obj.ip import IP_KINDS
10+
from riskdb.builder.obj.asn import ASN_KINDS
1011
from riskdb.builder.build import build_objects
12+
from riskdb.lister.config import LIST_START_DATE
1113
from riskdb.builder.load_reports import FileLoader
12-
from riskdb.builder.enrich_data import load_lookup_lists, get_ptrs_from_cache
13-
from riskdb.builder.obj.asn import ASN_KINDS
1414
from riskdb.builder.obj.network import KIND_IP_INHERITANCE
15-
from riskdb.builder.obj.ip import IP_KINDS
16-
from riskdb.lister.config import LIST_START_DATE
15+
from riskdb.lister.util import write_list, get_asn_organisation
16+
from riskdb.builder.enrich_data import load_lookup_lists, get_ptrs_from_cache
1717

1818
END_DATE = datetime.now()
1919

@@ -111,3 +111,11 @@ def list_kind(tmp_dir: Path):
111111
l = list(l)
112112
l.sort()
113113
write_list(d=t, file=f'kind_{k}.txt', lines=l, tmp_dir=tmp_dir)
114+
115+
if t == 'asn':
116+
csv = ['ASN,Organization']
117+
csv.extend([
118+
f"{k},{get_asn_organisation(lookup_lists['asn'], k)}"
119+
for k in l
120+
])
121+
write_list(d=t, file=f'kind_{k}.csv', lines=csv, tmp_dir=tmp_dir)

src/riskdb/lister/most_reported.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77

88
from riskdb.config import NET_SIZE
99
from riskdb.builder.util import log
10-
from riskdb.lister.util import write_list
1110
from riskdb.builder.load_reports import FileLoader
1211
from riskdb.lister.config import LIST_STATUS_COUNT
12+
from riskdb.builder.enrich_data import load_lookup_list_asn
13+
from riskdb.lister.util import write_list, get_asn_organisation
1314
from riskdb.builder.config import ASN_MMDB_FILE_IP4, ASN_MMDB_FILE_IP6
1415

1516
TOP_N = {
@@ -36,6 +37,8 @@ def list_most_reported(tmp_dir: Path):
3637

3738
log('Building Most-Reported Lists')
3839

40+
asn_metadata = load_lookup_list_asn()
41+
3942
ir = 0
4043
with mmdb_database(ASN_MMDB_FILE_IP4) as asn_db_ip4, mmdb_database(ASN_MMDB_FILE_IP6) as asn_db_ip6:
4144
for r in FileLoader(sliding_window=False):
@@ -117,7 +120,27 @@ def list_most_reported(tmp_dir: Path):
117120
a = '_ips_6'
118121

119122
write_list(d=t, file=f'top_{top_n}{a}.txt', lines=l[:top_n], tmp_dir=tmp_dir)
123+
124+
if t == 'asn':
125+
csv = ['ASN,Report count,Organization']
126+
csv.extend([
127+
f"{k},{v},{get_asn_organisation(asn_metadata, k)}"
128+
for k, v in dict(r[:top_n]).items()
129+
])
130+
131+
elif t == 'net':
132+
csv = ['Network,Report count']
133+
134+
else:
135+
csv = ['IP,Report count']
136+
137+
if t != 'asn':
138+
csv.extend([
139+
f"{k},{v}"
140+
for k, v in dict(r[:top_n]).items()
141+
])
142+
120143
write_list(
121144
d=t, file=f'top_{top_n}{a}.csv', tmp_dir=tmp_dir,
122-
lines=[f'{k},{v}' for k, v in dict(r[:top_n]).items()],
145+
lines=csv,
123146
)

src/riskdb/lister/util.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,19 @@ def write_list(d: str, file: str, lines: list[str], tmp_dir: Path):
1313

1414
except TypeError:
1515
f.write('\n'.join([str(l) for l in lines]))
16+
17+
18+
def get_asn_organisation(asn_metadata: dict, asn: int, csv: bool = True) -> str:
19+
asn = str(asn)
20+
if asn not in asn_metadata:
21+
return ''
22+
23+
m = asn_metadata[asn]
24+
if 'info' not in m:
25+
return ''
26+
27+
org = m['info'].get('name', m['organization'].get('name', ''))
28+
if csv:
29+
org = org.replace(',', '')
30+
31+
return org

0 commit comments

Comments
 (0)