Skip to content

Instantly share code, notes, and snippets.

@jwbensley
Created October 14, 2022 14:03
Show Gist options
  • Save jwbensley/922ed58141c6475c8c3be558aa4609fb to your computer and use it in GitHub Desktop.
Save jwbensley/922ed58141c6475c8c3be558aa4609fb to your computer and use it in GitHub Desktop.
Depth first search of a tree with a per-branch "exclude" list
#!/usr/bin/env python3
"""
ASN to AS-SET mapping:
AS4200000011 -> AS-A1
AS4200000021 -> AS-B1
AS4200000022 -> AS-B2
AS4200000023 -> AS-B3
AS4200000031 -> AS-C1
AS4200000032 -> AS-C2
AS4200000033 -> AS-C3
AS4200000034 -> None - leaf AS with no downstreams
"""
IRRDB = {
"AS-A1": {
"members": ["AS4200000011", "AS-B1", "AS-B2", "AS-B3", "AS-C1"],
"ex-members": ["AS-B3", "AS-C3", "AS4200000034"],
},
"AS-B1": {
"members": ["AS4200000021", "AS-C1", "AS-C2",],
},
"AS-B2": {
"members": ["AS4200000022", "AS-C1", "AS-C3"],
"ex-members": ["AS-C1"],
},
"AS-B3": {
"members": ["AS4200000023", "AS-B2", "AS-C2"],
},
"AS-C1": {
"members": ["AS4200000031"],
},
"AS-C2": {
"members": ["AS4200000032", "AS4200000034"],
},
"AS-C3": {
"members": ["AS4200000033", "AS4200000034"],
},
}
as_set_list = set()
asn_list = set()
def get_members(as_set, ex_list):
if "ex-members" in IRRDB[as_set]:
for m in IRRDB[as_set]["ex-members"]:
ex_list.add(m)
if "members" in IRRDB[as_set]:
for member in IRRDB[as_set]["members"]:
if member in ex_list:
continue
elif member[:3] == "AS-":
as_set_list.add(member)
get_members(member, ex_list.copy())
else:
asn_list.add(member)
get_members("AS-A1", set(IRRDB["AS-A1"]["ex-members"]))
print(f"final asset list: {as_set_list}")
print(f"final asn list: {asn_list}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment