Merge branch 'master' of git.dn42.dev:dn42/registry

This commit is contained in:
xuu 2020-07-19 00:53:47 +00:00
commit b3aeaa400c
74 changed files with 690 additions and 196 deletions

View file

@ -29,6 +29,8 @@ remarks: ANDROW-MNT
members: AS4242422575 members: AS4242422575
remarks: MOE-MNT remarks: MOE-MNT
members: AS4242422464 members: AS4242422464
remarks: JLU5-MNT
members: AS4242421080
admin-c: NAPSTERBATER-DN42 admin-c: NAPSTERBATER-DN42
tech-c: NAPSTERBATER-DN42 tech-c: NAPSTERBATER-DN42
mnt-by: NAPSTERBATER-MNT mnt-by: NAPSTERBATER-MNT

View file

@ -1,6 +1,6 @@
aut-num: AS4242422660 aut-num: AS135395
as-name: HERTZ NET as-name: HERTZ-AS
admin-c: HERTZ-DN42 admin-c: HERTZ-DN42
tech-c: HERTZ-DN42 tech-c: HERTZ-DN42
mnt-by: HERTZ-MNT mnt-by: HERTZ-MNT
source: DN42 source: APNIC

View file

@ -0,0 +1,8 @@
aut-num: AS4201270017
as-name: Cain's Home Network
descr: NextMoe GUser
admin-c: CAINSAKURA-NEONETWORK
tech-c: CAINSAKURA-NEONETWORK
remarks: Imported from neonetwork, do not edit!
mnt-by: DN42-MNT
source: NEONETWORK

16
data/aut-num/AS4242420977 Normal file
View file

@ -0,0 +1,16 @@
aut-num: AS4242420977
as-name: Moerail Network
remarks: +--------------------------------------+
| New peers welcome! |
+--------------------------------------+
| Peering requests: |
| arnie97@gmail.com |
| |
| Preferred protocols: |
| WireGuard, ZeroTier or GRE |
+--------------------------------------+
+
admin-c: ARNIE97-DN42
tech-c: ARNIE97-DN42
mnt-by: ARNIE97-MNT
source: DN42

View file

@ -20,6 +20,6 @@ remarks: --------------------------------------------------------
remarks: Looking glass available: lg.napshome.dn42 lg.dn42.napshome.net remarks: Looking glass available: lg.napshome.dn42 lg.dn42.napshome.net
remarks: -------------------------------------------------------- remarks: --------------------------------------------------------
remarks: Peering Location : Atlanta, GA, US: atl1-us.dn42.napshome.net remarks: Peering Location : Atlanta, GA, US: atl1-us.dn42.napshome.net
remarks: Frankfurt, DE : ffm1-de.dn42.napshome.net remarks: Frankfurt, DE : ffm1-de.dn42.napshome.net
remarks: Manchester. UK : mcr1-uk.dn42.napshome.net remarks: Manchester. UK : mcr1-uk.dn42.napshome.net
remarks: -------------------------------------------------------- remarks: --------------------------------------------------------

View file

@ -0,0 +1,7 @@
aut-num: AS4242421907
as-name: MrGhosh Network
descr: MrGhosh AS
admin-c: MRGHOSH-DN42
tech-c: MRGHOSH-DN42
mnt-by: MRGHOSH-MNT
source: DN42

View file

@ -1,6 +1,6 @@
aut-num: AS4242423747 aut-num: AS4242423747
as-name: ZHYZ-AS as-name: ZHYZ-AS
descr: Our email is zhihuiyuze.qq.com abd welcome to send us a message descr: Our email is zhihuiyuze@gmail abd welcome to send us a message
admin-c: ZHYZ-DN42 admin-c: ZHYZ-DN42
tech-c: ZHYZ-DN42 tech-c: ZHYZ-DN42
mnt-by: ZHYZ-MNT mnt-by: ZHYZ-MNT

View file

@ -3,5 +3,5 @@ admin-c: SOMNET-DN42
tech-c: SOMNET-DN42 tech-c: SOMNET-DN42
mnt-by: SOMNET-MNT mnt-by: SOMNET-MNT
nserver: ns1.somnet.dn42 172.20.33.5 nserver: ns1.somnet.dn42 172.20.33.5
nserver: ns1.somnet.dn42 fde7:32ae:ee77::5 nserver: ns1.somnet.dn42 fde7:32ae:ee77:f001:e770::52
source: DN42 source: DN42

10
data/dns/fox.dn42 Normal file
View file

@ -0,0 +1,10 @@
domain: fox.dn42
admin-c: KOALA-DN42
tech-c: KOALA-DN42
descr: Foxes
mnt-by: KOALA-MNT
mnt-by: HEXANET-MNT
nserver: h.delegation-servers.dn42
ds-rdata: 28104 15 2 d58969c6a8371cb5a37e04071833319175669f4092e5f276482186489ee0a3c9
ds-rdata: 28104 15 4 69fbf6cef10b4cb3df71d9e38865e6264502e94fb635f9f69aa5baf5f109360233a40aaa076836200d087368542956f1
source: DN42

View file

@ -2,6 +2,5 @@ domain: hertz.dn42
admin-c: HERTZ-DN42 admin-c: HERTZ-DN42
tech-c: HERTZ-DN42 tech-c: HERTZ-DN42
mnt-by: HERTZ-MNT mnt-by: HERTZ-MNT
nserver: ns-935.awsdns-52.net nserver: ns.hertz.dn42 172.20.29.78
nserver: ns-1255.awsdns-28.org
source: DN42 source: DN42

7
data/dns/hosting.dn42 Normal file
View file

@ -0,0 +1,7 @@
domain: hosting.dn42
admin-c: MEBUS-DN42
tech-c: MEBUS-DN42
descr: hosting.dn42 Domain
mnt-by: MEBUS-MNT
nserver: ns1.mebus.dn42 fd88:c7e:c7b7::1
source: DN42

10
data/dns/koala.dn42 Normal file
View file

@ -0,0 +1,10 @@
domain: koala.dn42
admin-c: KOALA-DN42
tech-c: KOALA-DN42
descr: Rawr IMMA Drop Bear
mnt-by: KOALA-MNT
mnt-by: HEXANET-MNT
nserver: h.delegation-servers.dn42
ds-rdata: 63771 15 2 6741668fcd31dcd9015d53edac53a50d77a509d986c876424db883895749a108
ds-rdata: 63771 15 4 254572571e1f213a9df9d87f33564f7c10e7c138774398f3a7880d30134ae855d0a536a6c8ecfb1180e3afa7590917ee
source: DN42

7
data/dns/matrix.dn42 Normal file
View file

@ -0,0 +1,7 @@
domain: matrix.dn42
admin-c: SOMNET-DN42
tech-c: SOMNET-DN42
mnt-by: SOMNET-MNT
nserver: ns1.matrix.dn42 172.20.33.5
nserver: ns1.matrix.dn42 fde7:32ae:ee77:f001:e770::52
source: DN42

9
data/dns/moerail.dn42 Normal file
View file

@ -0,0 +1,9 @@
domain: moerail.dn42
admin-c: ARNIE97-DN42
tech-c: ARNIE97-DN42
mnt-by: ARNIE97-MNT
nserver: ns1.moerail.dn42 172.20.128.197
nserver: ns1.moerail.dn42 fdec:c6a:4002::7
nserver: ns2.moerail.dn42 172.20.128.193
nserver: ns2.moerail.dn42 fdcc:c6a:4002::3
source: DN42

8
data/dns/mrghosh.dn42 Normal file
View file

@ -0,0 +1,8 @@
domain: mrghosh.dn42
descr: MrGhosh Network DN42 Website
admin-c: MRGHOSH-DN42
tech-c: MRGHOSH-DN42
mnt-by: MRGHOSH-MNT
nserver: ns1.mrghosh.dn42 172.23.222.53
nserver: ns1.mrghosh.dn42 fd42:4242:1907:53::1
source: DN42

View file

@ -3,5 +3,5 @@ admin-c: SOMNET-DN42
tech-c: SOMNET-DN42 tech-c: SOMNET-DN42
mnt-by: SOMNET-MNT mnt-by: SOMNET-MNT
nserver: ns1.somnet.dn42 172.20.33.5 nserver: ns1.somnet.dn42 172.20.33.5
nserver: ns1.somnet.dn42 fde7:32ae:ee77::5 nserver: ns1.somnet.dn42 fde7:32ae:ee77:f001:e770::52
source: DN42 source: DN42

10
data/dns/zhyz.dn42 Normal file
View file

@ -0,0 +1,10 @@
domain: zhyz.dn42
descr: https://zhyz.ru email:zhihuiyuze@gmail.com
nserver: ns1.zhyz.dn42 172.21.75.65
nserver: ns1.zhyz.dn42 d37:03b3:cae6::65
nserver: ns2.zhyz.dn42 172.21.75.66
nserver: ns2.zhyz.dn42 d37:03b3:cae6::66
admin-c: ZHYZ-DN42
tech-c: ZHYZ-DN42
mnt-by: ZHYZ-MNT
source: DN42

View file

@ -0,0 +1,8 @@
inet6num: fd10:0127:0234:0000:0000:0000:0000:0000 - fd10:0127:0234:ffff:ffff:ffff:ffff:ffff
cidr: fd10:127:234::/48
netname: CainSakura-home-devices
admin-c: CAINSAKURA-NEONETWORK
tech-c: CAINSAKURA-NEONETWORK
remarks: Imported from neonetwork, do not edit!
mnt-by: DN42-MNT
source: NEONETWORK

View file

@ -0,0 +1,11 @@
inet6num: fd42:4242:1907:0000:0000:0000:0000:0000 - fd42:4242:1907:ffff:ffff:ffff:ffff:ffff
cidr: fd42:4242:1907::/48
netname: MRGHOSH-V6-NET
descr: Network of MrGhosh
country: IN
admin-c: MRGHOSH-DN42
tech-c: MRGHOSH-DN42
mnt-by: MRGHOSH-MNT
nserver: ns1.mrghosh.dn42
status: ASSIGNED
source: DN42

View file

@ -1,11 +0,0 @@
inet6num: fd42:4242:2660:0000:0000:0000:0000:0000 - fd42:4242:2660:ffff:ffff:ffff:ffff:ffff
netname: HERTZ_IPV6_01
country: CN
admin-c: HERTZ-DN42
tech-c: HERTZ-DN42
mnt-by: HERTZ-MNT
nserver: ns-766.awsdns-31.net
nserver: ns-1474.awsdns-56.org
status: ASSIGNED
cidr: fd42:4242:2660::/48
source: DN42

View file

@ -0,0 +1,10 @@
inet6num: fd5a:2663:7b48:0000:0000:0000:0000:0000 - fd5a:2663:7b48:ffff:ffff:ffff:ffff:ffff
netname: HERTZ_IPV6_01
country: CN
admin-c: HERTZ-DN42
tech-c: HERTZ-DN42
mnt-by: HERTZ-MNT
nserver: ns.hertz.dn42
status: ASSIGNED
cidr: fd5a:2663:7b48::/48
source: DN42

View file

@ -0,0 +1,11 @@
inet6num: fdec:0c6a:4002:0000:0000:0000:0000:0000 - fdec:0c6a:4002:ffff:ffff:ffff:ffff:ffff
cidr: fdec:c6a:4002::/48
netname: MOERAIL-NG
descr: Moerail Network NG
admin-c: ARNIE97-DN42
tech-c: ARNIE97-DN42
mnt-by: ARNIE97-MNT
status: ASSIGNED
nserver: ns1.moerail.dn42
nserver: ns2.moerail.dn42
source: DN42

View file

@ -0,0 +1,8 @@
inetnum: 10.127.234.0 - 10.127.234.255
cidr: 10.127.234.0/24
netname: CainSakura-home-devices
admin-c: CAINSAKURA-NEONETWORK
tech-c: CAINSAKURA-NEONETWORK
remarks: Imported from neonetwork, do not edit!
mnt-by: DN42-MNT
source: NEONETWORK

View file

@ -1,5 +1,5 @@
inetnum: 10.127.69.0 - 10.127.69.7 inetnum: 10.127.69.0 - 10.127.69.31
cidr: 10.127.69.0/29 cidr: 10.127.69.0/27
netname: santost12 netname: santost12
admin-c: TYLER-NEONETWORK admin-c: TYLER-NEONETWORK
tech-c: TYLER-NEONETWORK tech-c: TYLER-NEONETWORK

View file

@ -1,5 +1,5 @@
inetnum: 10.127.8.184 - 10.127.8.191 inetnum: 10.127.8.160 - 10.127.8.191
cidr: 10.127.8.184/29 cidr: 10.127.8.160/27
netname: StaphNet netname: StaphNet
admin-c: STAPH-NEONETWORK admin-c: STAPH-NEONETWORK
tech-c: STAPH-NEONETWORK tech-c: STAPH-NEONETWORK

View file

@ -0,0 +1,12 @@
inetnum: 172.20.128.192 - 172.20.128.255
cidr: 172.20.128.192/26
netname: MOERAIL
descr: Moerail Network
country: CN
admin-c: ARNIE97-DN42
tech-c: ARNIE97-DN42
mnt-by: ARNIE97-MNT
status: ASSIGNED
nserver: ns1.moerail.dn42
nserver: ns2.moerail.dn42
source: DN42

View file

@ -0,0 +1,6 @@
inetnum: 172.20.165.128 - 172.20.165.191
cidr: 172.20.165.128/26
netname: MEBUS-LEGACY
status: ASSIGNED
mnt-by: MEBUS-MNT
source: DN42

View file

@ -4,8 +4,7 @@ country: CN
admin-c: HERTZ-DN42 admin-c: HERTZ-DN42
tech-c: HERTZ-DN42 tech-c: HERTZ-DN42
mnt-by: HERTZ-MNT mnt-by: HERTZ-MNT
nserver: ns-1162.awsdns-17.org nserver: ns.hertz.dn42
nserver: ns-1990.awsdns-56.co.uk
status: ASSIGNED status: ASSIGNED
cidr: 172.20.29.64/28 cidr: 172.20.29.64/28
source: DN42 source: DN42

View file

@ -0,0 +1,10 @@
inetnum: 172.23.222.32 - 172.23.222.63
cidr: 172.23.222.32/27
netname: MRGHOSH-V4-NET
country: IN
admin-c: MRGHOSH-DN42
tech-c: MRGHOSH-DN42
mnt-by: MRGHOSH-MNT
nserver: ns1.mrghosh.dn42
status: ASSIGNED
source: DN42

7
data/mntner/ARNIE97-MNT Normal file
View file

@ -0,0 +1,7 @@
mntner: ARNIE97-MNT
admin-c: ARNIE97-DN42
tech-c: ARNIE97-DN42
mnt-by: ARNIE97-MNT
auth: pgp-fingerprint 945C949DA1AE31D8B4CBD6D7514233F0DFC5BA92
auth: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBMzbeDlI3Ulo9VcrYiOoAUhbxLHhKJsJ+yskVWjvnI8
source: DN42

View file

@ -2,4 +2,6 @@ mntner: FEUERROT-MNT
admin-c: FEUERROT-DN42 admin-c: FEUERROT-DN42
tech-c: FEUERROT-DN42 tech-c: FEUERROT-DN42
mnt-by: FEUERROT-MNT mnt-by: FEUERROT-MNT
auth: pgp-fingerprint CA9470EA89B2F6D6E09BEE261E7523CA911AC822
auth: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMONNzx0+MKzDfjy9YDBWQyZ94ZjOCPw+T/VHnNqa7hk
source: DN42 source: DN42

View file

@ -4,3 +4,5 @@ admin-c: ELCH-DN42
tech-c: ELCH-DN42 tech-c: ELCH-DN42
mnt-by: FF02-MNT mnt-by: FF02-MNT
source: DN42 source: DN42
auth: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC87aXr06N9N8rHFicJfQv9zkHW1saxY1yxXFgkNGeMiGSz2Vtgad9BBoQl3XU557cZhfMCabwRSU20YiCrAzcB9/8K8AQm/UTqHp7Ug1via2GDf7H/M7HXNrpLTAjiEV62KbmvlFGfNJ5lPsA3tk/y+41U79u4YleSaTfmtdjWuP7C7HcRJfVzTL4djrvGY82D2xj0HN8uioBVaJVmm0+YTzCzh2t07TxG1mYQNkjej0ICErMlpWkDiPG0qoSuqM0+9ARpMXVZh7AkkQSb8wgr7rYYwbeiUfqzUAfjIJDziQZREJ/sdh7ORBDFXdWexi4u6RHCia0U9vzS51YR6xb/SGGJljWtbcUR1pMDwzxUPWkeXNnzs3fSLktPKybf8PWUBy3OtV/Xg7kcSkZ8ALNmoYi8kq+xR07GHFbUB/tW7J4+mmo0+R18vBNyxfQPAO4ekZa/p52U1mRkHO8sjY16uvlFY/soykGtFjhEhFLHZpQkdhXrsRykFCbFGwMsXbtNmLYtbM5/lfXijEpREisMa3SLkbG7dYcBI1rL5h1AwGtjwYD54ftTTW82fW1kfbdnD/LBPNB2YL8qj6E05Y4ydIt2V8SwoyFe/jPvCyvMRm6vKHfiG/Gq8LYwsT7YyQ3ZhgAH5NBppCHdWig+bkoBNAsjGdeJyJiB9Kf3NSthow==
auth: pgp-fingerprint D3D2A0E31A9E5BE6AEA6C25CFD1E3799E3FC77A6

7
data/mntner/MRGHOSH-MNT Normal file
View file

@ -0,0 +1,7 @@
mntner: MRGHOSH-MNT
descr: Sourav Ghosh - mrghosh maintainer
admin-c: MRGHOSH-DN42
tech-c: MRGHOSH-DN42
mnt-by: MRGHOSH-MNT
auth: pgp-fingerprint 70628E65BAE5158FA3493C26F590B26221E7BE39
source: DN42

View file

@ -2,5 +2,6 @@ mntner: SOMNET-MNT
admin-c: SOMNET-DN42 admin-c: SOMNET-DN42
tech-c: SOMNET-DN42 tech-c: SOMNET-DN42
mnt-by: SOMNET-MNT mnt-by: SOMNET-MNT
remarks: pin-sha256:OG9f6XD9Ztlzelwzu/hdStoOk2EQPiPhxHi5JFWI4eg=
auth: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjPxYYseIDs2PoJoaLr9FYhlT95CZtdVyLCRnMgtpg+0rrH+m3E6Q7721aseX5sL4PozhZA/kf+btipIRdqlZruXJprR9eTazQghSmASX8SZOssUy3+k6pdQ2ObJu4AmKPDukBeihem16fUTztO/NGL7SjFu/BTzXwaySJDirIp8OubPaS7F199eXlfgQpU1xJuleY8ip/1+3dmECtXbr0F0GMbLVf6guzh7+ExEaL+JwQbKUQ4lQIJhatnUIxk7gLGWDCEsdYLJxNujuaVDHVjApEmTvEFAcZH0np7cjTtcLGGN0hZgPE3ghxOgyrgOLGWzSnHMVqF+CzqbgcBorl auth: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjPxYYseIDs2PoJoaLr9FYhlT95CZtdVyLCRnMgtpg+0rrH+m3E6Q7721aseX5sL4PozhZA/kf+btipIRdqlZruXJprR9eTazQghSmASX8SZOssUy3+k6pdQ2ObJu4AmKPDukBeihem16fUTztO/NGL7SjFu/BTzXwaySJDirIp8OubPaS7F199eXlfgQpU1xJuleY8ip/1+3dmECtXbr0F0GMbLVf6guzh7+ExEaL+JwQbKUQ4lQIJhatnUIxk7gLGWDCEsdYLJxNujuaVDHVjApEmTvEFAcZH0np7cjTtcLGGN0hZgPE3ghxOgyrgOLGWzSnHMVqF+CzqbgcBorl
source: DN42 source: DN42

View file

@ -1,4 +1,5 @@
mntner: WALLE256-MNT mntner: WALLE256-MNT
auth: pgp-fingerprint AD085CF1EB9F7EA6C70CDBBEA533CB9C885B5E5B
admin-c: WALLE256-DN42 admin-c: WALLE256-DN42
tech-c: WALLE256-DN42 tech-c: WALLE256-DN42
mnt-by: WALLE256-MNT mnt-by: WALLE256-MNT

View file

@ -5,4 +5,4 @@ mnt-by: ZHYZ-MNT
source: DN42 source: DN42
auth: pgp-fingerprint 3063182DC8DDC8295327D968F81C854AA3BF45F7 auth: pgp-fingerprint 3063182DC8DDC8295327D968F81C854AA3BF45F7
auth: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCkJnS/PblMLT3pzFwD+otLnP5WuD62YBsASTdKIspQZc41RCyVw8EBJzJH6OeJ/PmsFm6bdI8YakzK0K1EPkmybiorbznbu4w8gpUJdK5WundTzZS2xGCmPLJRoh1n4UlyF3j2+oEbQTamYKls9KX133vlzr86l0KdQrTNMHpJdWyRUJqRQrocrqSbMl3qWsvxJJuIca4vRN76Xkgrj1es6FZ763AWSLWXVKNXF+2n8RfjPH0NJRebxiee0HHjmExgc8najhbHmEp0fX+3mGrNCZERNkRptQwaQPNwsdvtvIW0NPEjIGJdEBkDO/QRdatXXQVLFTn7+/scrPuyi/Itdb62/wbbEyF06he99Kle4c9RBh1Y1k+IoEXkpI+lp0RY3yhBzZ3NQXDffnLnNeKhPIOpyGOSMCtbd8mZjvwPH7hfaAVlzvUhsMKBu/chtOyaj9oqJ4SuYK2PNIYrR36zksL1wVK+kzpOI9y/i62WzVMwNWxVrgfHqu2ySQKQ7ss= auth: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCkJnS/PblMLT3pzFwD+otLnP5WuD62YBsASTdKIspQZc41RCyVw8EBJzJH6OeJ/PmsFm6bdI8YakzK0K1EPkmybiorbznbu4w8gpUJdK5WundTzZS2xGCmPLJRoh1n4UlyF3j2+oEbQTamYKls9KX133vlzr86l0KdQrTNMHpJdWyRUJqRQrocrqSbMl3qWsvxJJuIca4vRN76Xkgrj1es6FZ763AWSLWXVKNXF+2n8RfjPH0NJRebxiee0HHjmExgc8najhbHmEp0fX+3mGrNCZERNkRptQwaQPNwsdvtvIW0NPEjIGJdEBkDO/QRdatXXQVLFTn7+/scrPuyi/Itdb62/wbbEyF06he99Kle4c9RBh1Y1k+IoEXkpI+lp0RY3yhBzZ3NQXDffnLnNeKhPIOpyGOSMCtbd8mZjvwPH7hfaAVlzvUhsMKBu/chtOyaj9oqJ4SuYK2PNIYrR36zksL1wVK+kzpOI9y/i62WzVMwNWxVrgfHqu2ySQKQ7ss=
remarks: The maintainer's QQ and telegram are 1722649517 zhihuiyuze remarks: The maintainer's telegram are zhihuiyuze

5
data/person/ARNIE97-DN42 Normal file
View file

@ -0,0 +1,5 @@
person: Arnie
contact: arnie97@gmail.com
nic-hdl: ARNIE97-DN42
mnt-by: ARNIE97-MNT
source: DN42

View file

@ -0,0 +1,8 @@
person: CainSakura
nic-hdl: CAINSAKURA-NEONETWORK
contact: github: CainSakura
contact: telegram: CainSakura
e-mail: cain@iloli.cc
remarks: Imported from neonetwork, do not edit!
mnt-by: DN42-MNT
source: NEONETWORK

View file

@ -1,5 +1,6 @@
person: elch person: elch
contact: xmpp:elch@ein-elch.de contact: elch@ff02.net
pgp-fingerprint: 9F23651633635B68EC10122232920E2ACC4B075D
nic-hdl: ELCH-DN42 nic-hdl: ELCH-DN42
mnt-by: FF02-MNT mnt-by: FF02-MNT
source: DN42 source: DN42

View file

@ -1,8 +1,6 @@
person: feuerrot person: feuerrot
e-mail: feuerrot@feuerrot.org e-mail: feuerrot@feuerrot.org
contact: irc:feuerrot@hackint contact: irc:feuerrot@hackint
contact: xmpp:feuerrot@jabber.ccc.de
nic-hdl: FEUERROT-DN42 nic-hdl: FEUERROT-DN42
pgp-fingerprint: CA9470EA89B2F6D6E09BEE261E7523CA911AC822
mnt-by: FEUERROT-MNT mnt-by: FEUERROT-MNT
source: DN42 source: DN42

View file

@ -1,5 +1,6 @@
person: Liang Jingwen person: Liang Jingwen
contact: liangjw@etlgr.com contact: liangjw@etlgr.com
contact: dn42@cas7.moe
contact: telegram: @liangjw contact: telegram: @liangjw
pgp-fingerprint: A04C56688622E1D51DB4ED5D263BDBB7ECAB32E4 pgp-fingerprint: A04C56688622E1D51DB4ED5D263BDBB7ECAB32E4
nic-hdl: MOECAST-DN42 nic-hdl: MOECAST-DN42

9
data/person/MRGHOSH-DN42 Normal file
View file

@ -0,0 +1,9 @@
person: Sourav Ghosh
e-mail: souravndp@yandex.com
pgp-fingerprint: 70628E65BAE5158FA3493C26F590B26221E7BE39
contact: twitter:souravWB
www: https://sourav.eu.org
nic-hdl: MRGHOSH-DN42
mnt-by: MRGHOSH-MNT
remarks: ...
source: DN42

View file

@ -1,7 +1,7 @@
person: Tyler person: Tyler
nic-hdl: TYLER-NEONETWORK nic-hdl: TYLER-NEONETWORK
contact: github: santost12 contact: github: santost12
contact: telegram: xyz431 contact: telegram: santost12
remarks: Imported from neonetwork, do not edit! remarks: Imported from neonetwork, do not edit!
mnt-by: DN42-MNT mnt-by: DN42-MNT
source: NEONETWORK source: NEONETWORK

View file

@ -1,5 +1,6 @@
person: WallE256 - Radu Pogonariu person: WallE256 - Radu Pogonariu
contact: dn42@xera.ro - https://keybase.io/walle256 contact: dn42@radu.space - https://keybase.io/walle256
pgp-fingerprint: AD085CF1EB9F7EA6C70CDBBEA533CB9C885B5E5B
nic-hdl: WALLE256-DN42 nic-hdl: WALLE256-DN42
mnt-by: WALLE256-MNT mnt-by: WALLE256-MNT
source: DN42 source: DN42

View file

@ -1,5 +1,6 @@
person: zhihuiyuze person: zhihuiyuze
contact: zhihuiyuze@qq.com contact: zhihuiyuze@gmail.com
contact: zhyz@zhyz.ru
nic-hdl: ZHYZ-DN42 nic-hdl: ZHYZ-DN42
mnt-by: ZHYZ-MNT mnt-by: ZHYZ-MNT
source: DN42 source: DN42

View file

@ -0,0 +1,8 @@
route: 10.127.234.0/24
origin: AS4201270017
max-length: 29
admin-c: CAINSAKURA-NEONETWORK
tech-c: CAINSAKURA-NEONETWORK
remarks: Imported from neonetwork, do not edit!
mnt-by: DN42-MNT
source: NEONETWORK

View file

@ -1,4 +1,4 @@
route: 10.127.69.0/29 route: 10.127.69.0/27
origin: AS4201270009 origin: AS4201270009
max-length: 29 max-length: 29
admin-c: TYLER-NEONETWORK admin-c: TYLER-NEONETWORK

View file

@ -1,4 +1,4 @@
route: 10.127.8.184/29 route: 10.127.8.160/27
origin: AS4201270007 origin: AS4201270007
max-length: 29 max-length: 29
admin-c: STAPH-NEONETWORK admin-c: STAPH-NEONETWORK

View file

@ -0,0 +1,5 @@
route: 172.20.128.192/26
descr: Moerail Network
origin: AS4242420977
mnt-by: ARNIE97-MNT
source: DN42

View file

@ -0,0 +1,4 @@
route: 172.20.165.128/26
origin: AS4242420112
mnt-by: MEBUS-MNT
source: DN42

View file

@ -1,4 +1,4 @@
route: 172.20.29.64/28 route: 172.20.29.64/28
origin: AS4242422660 origin: AS135395
mnt-by: HERTZ-MNT mnt-by: HERTZ-MNT
source: DN42 source: DN42

View file

@ -1,5 +1,5 @@
route: 172.21.75.64/26 route: 172.21.75.64/26
descr: Peer with me at zhihuiyuze@qq.com descr: Peer with me at zhihuiyuze@gmail.com or zhyz@zhyz.ru
origin: AS4242423747 origin: AS4242423747
mnt-by: ZHYZ-MNT mnt-by: ZHYZ-MNT
source: DN42 source: DN42

View file

@ -0,0 +1,4 @@
route: 172.23.222.32/27
origin: AS4242421907
mnt-by: MRGHOSH-MNT
source: DN42

View file

@ -0,0 +1,8 @@
route6: fd10:127:234::/48
origin: AS4201270017
max-length: 64
admin-c: CAINSAKURA-NEONETWORK
tech-c: CAINSAKURA-NEONETWORK
remarks: Imported from neonetwork, do not edit!
mnt-by: DN42-MNT
source: NEONETWORK

View file

@ -1,5 +1,5 @@
route6: fd37:3b3:cae6::/48 route6: fd37:3b3:cae6::/48
descr: Peer with me at zhihuiyuze@qq.com And telegram is zhihuiyuze descr: Peer with me at zhihuiyuze@gmail.com And twitter is zhihuiyuze
origin: AS4242423747 origin: AS4242423747
mnt-by: ZHYZ-MNT mnt-by: ZHYZ-MNT
source: DN42 source: DN42

View file

@ -0,0 +1,5 @@
route6: fd42:4242:1907::/48
origin: AS4242421907
max-length: 48
mnt-by: MRGHOSH-MNT
source: DN42

View file

@ -1,4 +0,0 @@
route6: fd42:4242:2660::/48
origin: AS4242422660
mnt-by: HERTZ-MNT
source: DN42

View file

@ -0,0 +1,4 @@
route6: fd5a:2663:7b48::/48
origin: AS135395
mnt-by: HERTZ-MNT
source: DN42

View file

@ -0,0 +1,6 @@
route6: fdec:c6a:4002::/48
descr: Moerail Network NG
origin: AS4242420977
max-length: 48
mnt-by: ARNIE97-MNT
source: DN42

View file

@ -2,18 +2,18 @@
__version__ = "0.3.0" __version__ = "0.3.0"
from .filedom import FileDOM, Row, Value, index_files from .file import FileDOM, Row, Value, index_files
from .schema import SchemaDOM, Level, State from .schema import SchemaDOM, Level, State
from .transact import TransactDOM from .transact import TransactDOM
from .config import Config from .config import Config
from .nettree import NetTree, NetRecord, NetList from .nettree import NetTree, NetRecord, NetList, as_net6
from .rspldom import RPSL from .rspl import RPSL
__all__ = [ __all__ = [
"FileDOM", "Row", "Value", "index_files", "FileDOM", "Row", "Value", "index_files",
"SchemaDOM", "Level", "State", "SchemaDOM", "Level", "State",
"TransactDOM", "TransactDOM",
"Config", "Config",
"NetTree", "NetRecord", "NetList", "NetTree", "NetRecord", "NetList", "as_net6",
"RPSL", "RPSL",
] ]

View file

@ -6,7 +6,7 @@ import os.path
from dataclasses import dataclass from dataclasses import dataclass
from typing import Dict, Set, Tuple, Optional, TypeVar from typing import Dict, Set, Tuple, Optional, TypeVar
from .filedom import FileDOM from .file import FileDOM
C = TypeVar('C', bound='Config') C = TypeVar('C', bound='Config')
@ -66,6 +66,11 @@ class Config:
"return network parents" "return network parents"
return set(self.network_owners.values()) return set(self.network_owners.values())
@property
def network_children(self) -> Set[str]:
"return network children"
return set(self.network_owners.keys()) - self.network_parents
@property @property
def schema_dir(self) -> str: def schema_dir(self) -> str:
"get schema directory" "get schema directory"

View file

@ -55,6 +55,15 @@ class Value:
"""Format as key name""" """Format as key name"""
return self.value.replace("/", "_").replace(" ", "") return self.value.replace("/", "_").replace(" ", "")
@property
def as_spec(self) -> List[str]:
"get the spec definition"
fields = self.fields
i = fields.index(">")
if i is None:
return []
return fields[i:]
class Row(NamedTuple): class Row(NamedTuple):
"""DOM Row""" """DOM Row"""
@ -183,11 +192,10 @@ class FileDOM:
return f"{self.namespace}.{self.schema}" return f"{self.namespace}.{self.schema}"
@property @property
def index(self) -> Tuple[Tuple[str, str], Tuple[str, str]]: def index(self) -> Tuple[str, str]:
"""generate index key/value pair""" """generate index key/value pair"""
name = self.src.split("/")[-1].replace("_", "/") name = self.src.split("/")[-1].replace("_", "/")
return ((f"{self.namespace}.{self.schema}", name), return f"{self.namespace}.{self.schema}", name
(self.src, ",".join(self.mntner)))
def __str__(self): def __str__(self):
length = 19 length = 19

View file

@ -0,0 +1,23 @@
"Metafile"
from dataclasses import dataclass
from typing import Sequence, Generator
from .rspl import RPSL
from .file import Value
@dataclass
class MetaFile:
"file"
obj_type: str
obj_name: str
class MetaDOM:
"metafile dom"
def __init__(self, lis: Sequence[MetaFile], rpsl: RPSL):
self.lis = lis
self.rpsl = rpsl
def get(self, name: str) -> Generator[Value, None, None]:
"get values"

View file

@ -1,7 +1,7 @@
"Net Tree" "Net Tree"
from ipaddress import ip_network, IPv6Network from ipaddress import ip_network, IPv6Network
from dataclasses import dataclass from dataclasses import dataclass, field
from typing import Dict, List, Tuple, Optional, Generator, TypeVar from typing import Dict, List, Tuple, Optional, Generator, TypeVar
NET = IPv6Network NET = IPv6Network
@ -10,16 +10,33 @@ V4_NET = ip_network("::ffff:0.0.0.0/96")
NT = TypeVar("NT", bound="NetTree") NT = TypeVar("NT", bound="NetTree")
def as_net6(value: str) -> IPv6Network:
"""return value as an ip network"""
net = ip_network(value)
if isinstance(net, IPv6Network):
return net
n = net
return ip_network(
f"::FFFF:{n.network_address}/{n.prefixlen + 96}")
@dataclass @dataclass
class NetRecord: class NetRecord:
"Network Record" "Network Record"
network: NET network: NET
policy: str policy: str
status: str status: str
is_leaf: bool = False
@property @property
def object_type(self) -> str: def object_type(self) -> str:
"""object type""" """object type"""
if self.is_leaf:
return "route" if V4_NET.supernet_of(self.network) \
else "route6"
return "inetnum" if V4_NET.supernet_of(self.network) \ return "inetnum" if V4_NET.supernet_of(self.network) \
else "inet6num" else "inet6num"
@ -35,6 +52,9 @@ class NetRecord:
return self.network.with_prefixlen.replace("/", "_") return self.network.with_prefixlen.replace("/", "_")
def __str__(self) -> str:
return f"{self.object_type}/{self.object_name}"
@dataclass @dataclass
class NetList: class NetList:
@ -44,6 +64,7 @@ class NetList:
level: int level: int
net: Optional[NetRecord] net: Optional[NetRecord]
nets: List[NET] nets: List[NET]
routes: List[NetRecord] = field(default_factory=list)
def in_net(self, i: NET) -> Tuple[bool, NET]: def in_net(self, i: NET) -> Tuple[bool, NET]:
"find a network within a list of networks" "find a network within a list of networks"
@ -57,39 +78,55 @@ class NetList:
return found, net return found, net
def in_routes(self, i: NET) -> Tuple[bool, NET]:
"find a network within a list of networks"
found = False
net = None
for n in self.routes:
if n.network.supernet_of(i):
found = True
net = n
break
return found, net
class NetTree: class NetTree:
"Network Tree" "Network Tree"
def __init__(self, nets: Optional[List[NET]] = None): def __init__(self,
nets: Optional[List[NetRecord]] = None,
routes: Optional[List[NetRecord]] = None):
self.tree = {} # type: Dict[NET, NetList] self.tree = {} # type: Dict[NET, NetList]
if routes is None:
routes = []
if nets is not None: if nets is not None:
self.make_tree(nets) self.make_tree(nets, routes)
def __getitem__(self, key): def __getitem__(self, key):
return self.tree[key] return self.tree[key]
def find_tree(self, ip: NET) -> Tuple[bool, int]: def find_tree(self, ip: str) -> Generator[NetList, None, None]:
"""Find net in tree""" """Find net in tree"""
net = V6_NET net = V6_NET
current = self.tree[net] current = self.tree[net]
needle = as_net6(ip)
yield current
while True: while True:
found, net = current.in_net(ip) found, net = current.in_net(needle)
if not found: if found:
return True, current.level + 1 current = self.tree[net]
yield current
continue
break
if ip == net: def make_tree(self,
return True, current.level + 2 nets: List[NetRecord],
routes: List[NetRecord]):
current = self.tree[net]
continue
return False, 0
def make_tree(self, nets: List[NetRecord]):
"""build a network tree index""" """build a network tree index"""
root = V6_NET root = V6_NET
self.tree = {root: NetList(0, None, -1, None, [])} self.tree = {root: NetList(0, None, -1, None, [])}
index = 0
for index, net in enumerate(sorted( for index, net in enumerate(sorted(
sorted(nets, key=lambda x: x.network), sorted(nets, key=lambda x: x.network),
key=lambda x: x.network.prefixlen)): key=lambda x: x.network.prefixlen)):
@ -110,6 +147,23 @@ class NetTree:
index, current.index, current.level + 1, net, []) index, current.index, current.level + 1, net, [])
break break
for index, net in enumerate(sorted(
sorted(routes, key=lambda x: x.network),
key=lambda x: x.network.prefixlen), index):
current = self.tree[root]
while True:
found, n = current.in_net(net.network)
if found:
current = self.tree[n]
continue
rec = NetRecord(net.network, "-", "-", True)
current.routes.append(rec)
break
def write_csv(self, fn: str = ".netindex"): def write_csv(self, fn: str = ".netindex"):
"write tree to csv" "write tree to csv"
with open(fn, "w") as f: with open(fn, "w") as f:
@ -135,6 +189,19 @@ class NetTree:
v.net.object_type, v.net.object_type,
v.net.object_name, v.net.object_name,
)]) + "\n") )]) + "\n")
for route in v.routes:
net_addr = route.network.network_address.exploded
net_pfx = route.network.prefixlen
yield (
"|".join([str(i) for i in (
f"{0:04d}|{v.index:04d}|{v.level+1:04d}",
net_addr,
net_pfx,
route.policy,
route.status,
route.object_type,
route.object_name,
)]) + "\n")
@classmethod @classmethod
def read_csv(cls, fn) -> NT: def read_csv(cls, fn) -> NT:
@ -146,15 +213,20 @@ class NetTree:
if len(sp) != 9: if len(sp) != 9:
continue continue
net = ip_network(f"{sp[3]}/{sp[4]}") net = ip_network(f"{sp[3]}/{sp[4]}")
rec = NetRecord(net, sp[5], sp[6]) is_leaf = sp[7] in ("route", "route6")
lis = NetList(sp[0], sp[1], sp[2], rec, []) rec = NetRecord(net, sp[5], sp[6], is_leaf)
inttree[sp[0]] = lis if is_leaf:
if sp[0] != sp[1]: inttree[sp[1]].routes.append(rec)
inttree[sp[1]].nets.append(net) else:
lis = NetList(sp[0], sp[1], sp[2], rec, [])
inttree[sp[0]] = lis
if sp[0] != sp[1]:
inttree[sp[1]].nets.append(net)
nettree = {} nettree = {}
for v in inttree.values(): for v in inttree.values():
nettree[v.net.network] = v nettree[v.net.network] = v
c = cls() c = cls()
c.tree = NetTree c.tree = nettree
return c return c

View file

@ -1,10 +1,10 @@
"RPSL" "RPSL"
import os.path import os.path
from typing import Dict, List, Tuple, TypeVar, Optional, Generator from typing import Dict, List, Tuple, TypeVar, Optional, Sequence
from .filedom import FileDOM from .file import FileDOM
from .nettree import NetTree from .nettree import NetTree, NetList
from .schema import SchemaDOM, State from .schema import SchemaDOM, State
from .transact import TransactDOM from .transact import TransactDOM
from .config import Config from .config import Config
@ -49,7 +49,7 @@ class RPSL:
def append_index(self, dom: FileDOM): def append_index(self, dom: FileDOM):
"append files to index" "append files to index"
key, value = dom.index key, value = dom.index, (dom.src, ",".join(dom.mntner))
self._lookup[key] = value self._lookup[key] = value
def scan_files(self, files: List[FileDOM]) -> State: def scan_files(self, files: List[FileDOM]) -> State:
@ -67,24 +67,35 @@ class RPSL:
def find(self, def find(self,
text: str, text: str,
schema: Optional[str] = None) -> Generator[FileDOM, None, None]: schema: Optional[str] = None) -> Sequence[str]:
"Find files that match text and schema" "Find files that match text and schema"
keys = [(schema, text)] keys = [(schema, text)]
if schema is None: if schema is None:
keys = self._lookup.get(text, []) keys = self._lookup.get(text, [])
return [self._files[i] for i in keys]
def related(
self,
key: Tuple[str, str]) -> Sequence[str]:
"Get files related to file"
related = set() related = set()
for link in self.links(key):
key = (link[1], link[2])
related.add(key)
for i in keys: return [self._files[i] for i in related]
yield self.load_file(self._files[i])
for link in self.links(i):
key = (link[1], link[2])
related.add(key)
for i in related: def find_network(self, ip: str) -> Sequence[NetList]:
if i in keys: """Find Network in index
continue
yield self.load_file(self._files[i]) Args:
ip (str): ip address
Returns:
Generator[NetList, None, None]: generator of netlists
"""
return self._nettree.find_tree(ip)
def load_file(self, fn: str) -> FileDOM: def load_file(self, fn: str) -> FileDOM:
"load file" "load file"
@ -95,6 +106,14 @@ class RPSL:
return fo return fo
def load_files(self, fns: Sequence[str]) -> Sequence[NetList]:
for fn in fns:
yield self.load_file(fn)
def links(self, key: Tuple[str, str]) -> List[Tuple[str, str]]: def links(self, key: Tuple[str, str]) -> List[Tuple[str, str]]:
"get links" "get links"
return self._links.get(key, []) return self._links.get(key, [])
def schema(self, name: str) -> SchemaDOM:
"get schema"
return self._schema.get(name)

View file

@ -6,7 +6,7 @@ from typing import Optional, List, Tuple, Dict, Set, TypeVar
import log import log
from .filedom import FileDOM, Row from .file import FileDOM, Row
DOM = TypeVar("DOM", bound="FileDOM") DOM = TypeVar("DOM", bound="FileDOM")
STATE = TypeVar("STATE", bound="State") STATE = TypeVar("STATE", bound="State")

View file

@ -0,0 +1,21 @@
"spec"
from dataclasses import dataclass
from typing import Dict, List, Enum
class Rule:
pass
@dataclass
class LabelRule(Rule):
name: str
def parse(self, fields: Sequence[str]) -> Optional[Tuple[str, str]]:
@dataclass
class Spec:
keys: Dict[str, SpecRule]
@classmethod
def from_dom(cls, dom: file.FileDOM):
for key in

View file

@ -0,0 +1,134 @@
#!/usr/bin/env python3
"""Test FileDOM"""
import unittest
import inspect
from pprint import pprint
from .filedom import FileDOM
class TestFileDOM(unittest.TestCase):
"""Test FileDOM"""
def test_parse(self):
"""Test Parsing"""
s = """
person: Xuu
remarks: test
+
Multi-Line
contact: xmpp:xuu@xmpp.dn42
contact: mail:xuu@dn42.us
pgp-fingerprint: 20AE2F310A74EA7CEC3AE69F8B3B0604F164E04F
nic-hdl: XUU-DN42
mnt-by: XUU-MNT
source: DN42
"""
s = inspect.cleandoc(s)+"\n"
dom = FileDOM()
dom.parse(s.splitlines())
self.assertTrue(dom.valid)
self.assertEqual(dom.schema, "person")
self.assertEqual(dom.get("person"), "Xuu")
self.assertEqual(dom.get("contact"), "xmpp:xuu@xmpp.dn42")
self.assertEqual(dom.get("contact", index=1), "mail:xuu@dn42.us")
self.assertIsNone(dom.get("xxx"))
self.assertEqual(dom.get("xxx", default="default"), "default")
self.assertEqual(str(dom), s)
def test_put_values(self):
"""Test putting values"""
s = """
person: Xuu
remarks: test
contact: xmpp:xuu@xmpp.dn42
contact: mail:xuu@dn42.us
pgp-fingerprint: 20AE2F310A74EA7CEC3AE69F8B3B0604F164E04F
nic-hdl: XUU-DN42
mnt-by: XUU-MNT
source: DN42
"""
s = inspect.cleandoc(s)+"\n"
dom = FileDOM()
dom.parse(s.splitlines())
dom.put("source", "SOURIS")
self.assertEqual(dom.get("source"), "SOURIS")
dom.put("contact", "mail:me@sour.is", append=True)
self.assertEqual(str(dom.get("contact")), "xmpp:xuu@xmpp.dn42")
self.assertEqual(dom.get("contact", index=1), "mail:xuu@dn42.us")
self.assertEqual(dom.get("contact", index=2), "mail:me@sour.is")
def test_parse_ip6address(self):
"""Test network ip address parsing"""
s = """
inet6num: fd00:0000:0000:0000:0000:0000:0000:0000 - fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
cidr: fd00::/8
netname: ROOT-DN42-ULA
descr: DN42 ULA Address Space
status: ALLOCATED
policy: open
org: ORG-DN42
mnt-by: DN42-MNT
source: DN42
""" # noqa: E501
s = inspect.cleandoc(s)+"\n"
dom = FileDOM(text=s.splitlines())
cidr = dom.get("cidr").as_net
self.assertEqual(cidr.compressed, "fd00::/8")
self.assertEqual(
cidr.exploded, "fd00:0000:0000:0000:0000:0000:0000:0000/8")
end = cidr.broadcast_address.exploded
start = cidr.network_address.exploded
self.assertEqual(dom.get("inet6num"), f"{start} - {end}")
def test_parse_ip4address(self):
"""Test network ip address parsing"""
s = """
inetnum: 172.20.0.0 - 172.23.255.255
cidr: 172.20.0.0/14
netname: ROOT-DN42
"""
s = inspect.cleandoc(s)+"\n"
dom = FileDOM(text=s.splitlines())
cidr = dom.get("cidr").as_net
self.assertEqual(cidr.compressed, "172.20.0.0/14")
self.assertEqual(
cidr.exploded, "172.20.0.0/14")
end = cidr.broadcast_address.exploded
start = cidr.network_address.exploded
self.assertEqual(dom.get("inetnum"), f"{start} - {end}")
@unittest.skip
def test_bad_parse(self):
"""bad parse stuff"""
s = """
person: Xuu
EXTRA
:
source: DN42
"""
s = inspect.cleandoc(s)+"\n"
dom = FileDOM()
dom.parse(s.splitlines())
pprint(dom.dom)
self.assertEqual(str(dom), s)
if __name__ == '__main__':
unittest.main()

View file

@ -2,7 +2,7 @@
from typing import Sequence, List, Optional, Tuple, TypeVar from typing import Sequence, List, Optional, Tuple, TypeVar
from .filedom import FileDOM from .file import FileDOM
from .schema import SchemaDOM from .schema import SchemaDOM
DOM = TypeVar("DOM", bound="TransactDOM") DOM = TypeVar("DOM", bound="TransactDOM")

View file

@ -40,12 +40,13 @@ def run(args: List[str], env: Dict[str, str]) -> int:
idx = index_files(path, idx = index_files(path,
namespace=config.namespace, namespace=config.namespace,
primary_keys=config.primary_keys) primary_keys=config.primary_keys)
lookup, schemas, files, nets = build_index(idx, rspl=config) lookup, schemas, files, nets, routes = build_index(idx, rspl=config)
print( print(
f"Reading Files: done! files: {len(files)}" + f"Reading Files: done! files: {len(files)}" +
f" schemas: {len(schemas)}" + f" schemas: {len(schemas)}" +
f" networks: {len(nets)}", f" networks: {len(nets)}",
f" routes: {len(routes)}",
file=sys.stderr) file=sys.stderr)
print("Writing .rpsl/index", file=sys.stderr) print("Writing .rpsl/index", file=sys.stderr)
@ -71,7 +72,7 @@ def run(args: List[str], env: Dict[str, str]) -> int:
file=link_out) file=link_out)
print("Generate .rpsl/nettree", file=sys.stderr) print("Generate .rpsl/nettree", file=sys.stderr)
tree = NetTree(nets) tree = NetTree(nets, routes)
print("Writing .rpsl/nettree", file=sys.stderr) print("Writing .rpsl/nettree", file=sys.stderr)
tree.write_csv(".rpsl/nettree") tree.write_csv(".rpsl/nettree")
@ -105,17 +106,19 @@ def build_index(
schemas = {} # type: Dict[str, SchemaDOM] schemas = {} # type: Dict[str, SchemaDOM]
files = [] # type: List[FileDOM] files = [] # type: List[FileDOM]
nets = [] # type: List[NetRecord] nets = [] # type: List[NetRecord]
routes = [] # type: List[NetRecord]
print(r"Reading Files...", end="\r", flush=True, file=sys.stderr) print(r"Reading Files...", end="\r", flush=True, file=sys.stderr)
net_types = rspl.network_parents net_types = rspl.network_parents
net_leafs = rspl.network_children
for (i, dom) in enumerate(idx): for (i, dom) in enumerate(idx):
if not dom.valid: if not dom.valid:
print("E", end="", flush=True) print("E", end="", flush=True)
continue continue
key, _ = dom.index key = dom.index
lookup.add(key) lookup.add(key)
files.append(dom) files.append(dom)
@ -130,14 +133,23 @@ def build_index(
dom.get("status", default="ASSIGNED"), dom.get("status", default="ASSIGNED"),
)) ))
if dom.schema in net_leafs:
routes.append(NetRecord(
dom.get(dom.primary_key).as_net6,
dom.get("policy", default="none"),
dom.get("status", default="none"),
True,
))
if i % 120 == 0: if i % 120 == 0:
print( print(
f"Reading Files: files: {len(files)}" + f"Reading Files: files: {len(files)}" +
f" schemas: {len(schemas)} " + f" schemas: {len(schemas)} " +
f" networks: {len(nets)}", f" networks: {len(nets)}",
f" routes: {len(routes)}",
end="\r", flush=True, file=sys.stderr) end="\r", flush=True, file=sys.stderr)
return (lookup, schemas, files, nets) return (lookup, schemas, files, nets, routes)
def generate_links( def generate_links(
@ -147,15 +159,12 @@ def generate_links(
) -> Generator[Tuple[str, str, str], None, None]: ) -> Generator[Tuple[str, str, str], None, None]:
"print file links out to file" "print file links out to file"
for (link, refs) in links.items(): for (link, refs) in links.items():
d = dom.get(link) for d in dom.get_all(link):
if d is None: found = False
continue for ref in refs:
if (ref, d.value) in lookup:
found = True
yield (link, ref, d)
found = False if not found:
for ref in refs: print(f"{dom.name} missing link {link} {d.value}")
if (ref, d.value) in lookup:
found = True
yield (link, ref, d)
if not found:
print(f"{dom.name} missing link {link} {d.value}")

View file

@ -63,6 +63,7 @@ def run(args: List[str], env: Dict[str, str]) -> int:
print(rpsl, file=f) print(rpsl, file=f)
print(f"Created: {rpsl.config_file}", file=sys.stderr) print(f"Created: {rpsl.config_file}", file=sys.stderr)
env["RPSL_DIR"] = rpsl_dir
rpsl_index.run(args, env) rpsl_index.run(args, env)
return 0 return 0

View file

@ -6,10 +6,10 @@ Usage: rpsl whois [text]
""" """
import sys import sys
from ipaddress import ip_network from itertools import chain
from typing import List, Dict, Optional from typing import List, Dict, Optional, Set, Tuple
from dn42.rpsl import RPSL, Config from dn42.rpsl import RPSL, Config, FileDOM, as_net6
from dn42.utils import shift, exists from dn42.utils import shift, exists
@ -41,15 +41,46 @@ def run(args: List[str], env: Dict[str, str]) -> int:
ip = None ip = None
try: try:
ip = ip_network(text) ip = as_net6(text)
except ValueError: except ValueError:
pass pass
if ip is not None: principle = [] # type: List[FileDOM]
print(f"Searching network {text}...") related_nets = [] # type: List[FileDOM]
return 0 related_idx = set() # type: Set[Tuple[str, str]]
for dom in rpsl.find(text, schema): if ip is not None:
print(f"# Searching network {text}...")
nets = list(rpsl.find_network(text))
last_net = nets[-1]
dom = rpsl.load_file(str(last_net.net))
principle.append(dom)
related_idx.add(dom.index)
ok, route = last_net.in_routes(ip)
if ok:
dom = rpsl.load_file(str(route))
principle.append(dom)
related_idx.add(dom.index)
for net in nets[:-1]:
dom = rpsl.load_file(str(net.net))
related_nets.append(dom)
else:
for dom in rpsl.find(text, schema):
principle.append(dom)
related_idx.add(dom.index)
print("# Found objects")
for dom in principle:
print(dom) print(dom)
if len(related_nets) > 0:
print("# Related Networks")
for dom in related_nets:
print(dom)
print("# Related objects")
lis = set(chain.from_iterable(rpsl.related(i) for i in related_idx))
for dom in rpsl.load_files(sorted(lis)):
print(dom)
return 0 return 0

View file

@ -1,70 +0,0 @@
#!/usr/bin/env python3
"""Scans Registry at given path for issues"""
import os
import sys
from typing import Dict
from dom.filedom import FileDOM
from dom.schema import SchemaDOM
def index_files(path: str):
"""generate list of dom files"""
for root, _, files in os.walk(path):
if root == path:
continue
for f in files:
if f[0] == ".":
continue
dom = FileDOM.from_file(os.path.join(root, f))
yield dom
def run(path: str = "."):
"""run main script"""
idx = index_files(path)
lookups = {} # type: Dict[str, FileDOM]
schemas = {} # type: Dict[str, SchemaDOM]
files = []
print(r"Reading Files...", end="\r", flush=True, file=sys.stderr)
for (i, dom) in enumerate(idx):
if not dom.valid:
print("E", end="", flush=True)
continue
key, value = dom.index
lookups[key] = value
files.append(dom)
if dom.schema == "schema":
schema = SchemaDOM(dom)
schemas[schema.ref] = schema
if i % 120 == 0:
print(
f"Reading Files: files: {len(files)} schemas: {len(schemas)}",
end="\r", flush=True, file=sys.stderr)
print(
f"Reading Files: done! files: {len(files)}, schemas: {len(schemas)}",
file=sys.stderr)
for dom in files:
s = schemas.get(dom.rel)
if s is None:
print(f"{dom.src} schema not found for {dom.rel}")
continue
status = s.check_file(dom, lookups)
status.print()
if __name__ == "__main__":
run(sys.argv[1] if len(sys.argv) > 1 else os.getcwd())