Skip to content

Commit

Permalink
[feature] Added ZeroTier Parser #106
Browse files Browse the repository at this point in the history
Closes #106
  • Loading branch information
Aryamanz29 committed Aug 10, 2023
1 parent 3c2592c commit e07d13d
Show file tree
Hide file tree
Showing 5 changed files with 564 additions and 0 deletions.
1 change: 1 addition & 0 deletions netdiff/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
from .parsers.olsr import OlsrParser # noqa
from .parsers.openvpn import OpenvpnParser # noqa
from .parsers.wireguard import WireguardParser # noqa
from .parsers.zerotier import ZeroTierParser # noqa
from .utils import diff # noqa
42 changes: 42 additions & 0 deletions netdiff/parsers/zerotier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import json
from copy import deepcopy

from netdiff.parsers.base import BaseParser


class ZeroTierParser(BaseParser):
protocol = 'ZeroTier Peers Information'
version = '1'
metric = 'static'

def to_python(self, data):
if isinstance(data, list):
return data
return super().to_python(data)

def parse(self, data):
graph = self._init_graph()
for peer in data:
if peer.get('role') != 'LEAF':
continue
for path in peer.get('paths'):
if (
not path.get('expired')
and path.get('active')
and path.get('preferred')
):
peer_address = peer.get('address')
peer_properties = dict(
label=peer_address,
address=peer_address,
role=peer.get('role'),
version=peer.get('version'),
tunneled=peer.get('tunneled'),
isBonded=peer.get('isBonded'),
)
graph.add_node('controller', label='controller')
graph.add_node(peer_address, **peer_properties)
graph.add_edge(
'controller', peer_address, weight=peer.get('latency'), **path
)
return graph
300 changes: 300 additions & 0 deletions tests/static/zt-peers-diff.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,300 @@
[
{
"address": "3504e2b2e2",
"isBonded": false,
"latency": 1,
"paths": [
{
"active": true,
"address": "192.168.56.3/9993",
"expired": false,
"lastReceive": 1691493323678,
"lastSend": 1691493323677,
"localSocket": 94434869092208,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.3/9993",
"expired": false,
"lastReceive": 1691493323678,
"lastSend": 1691493323677,
"localSocket": 94434869109504,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.3/9993",
"expired": false,
"lastReceive": 1691493323678,
"lastSend": 1691493323677,
"localSocket": 94434869108304,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.1/44221",
"expired": false,
"lastReceive": 1691493323678,
"lastSend": 1691493323677,
"localSocket": 94434869108304,
"preferred": true,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.1/44221",
"expired": false,
"lastReceive": 1691493308664,
"lastSend": 1691493325843,
"localSocket": 94434869092208,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.1/44221",
"expired": false,
"lastReceive": 1691493293653,
"lastSend": 1691493310824,
"localSocket": 94434869109504,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "fd60:8d57:65e9::1/9993",
"expired": false,
"lastReceive": 1691493323678,
"lastSend": 1691493323677,
"localSocket": 94434869123504,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "fd60:8d57:65e9::1/9993",
"expired": false,
"lastReceive": 1691493323678,
"lastSend": 1691493323677,
"localSocket": 94434869095936,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "fd60:8d57:65e9::1/9993",
"expired": false,
"lastReceive": 1691493325843,
"lastSend": 1691493323677,
"localSocket": 94434869119488,
"preferred": false,
"trustedPathId": 0
}
],
"role": "LEAF",
"tunneled": false,
"version": "1.10.3",
"versionMajor": 1,
"versionMinor": 10,
"versionRev": 3
},
{
"address": "4a9e1c6f14",
"isBonded": false,
"latency": 0,
"paths": [
{
"active": true,
"address": "192.168.56.2/9993",
"expired": false,
"lastReceive": 1691493318673,
"lastSend": 1691493318672,
"localSocket": 94434869092208,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.2/9993",
"expired": false,
"lastReceive": 1691493318673,
"lastSend": 1691493318672,
"localSocket": 94434869109504,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.2/9993",
"expired": false,
"lastReceive": 1691493323678,
"lastSend": 1691493323677,
"localSocket": 94434869108304,
"preferred": true,
"trustedPathId": 0
},
{
"active": true,
"address": "fdcf:5771:404::1/9993",
"expired": false,
"lastReceive": 1691493318673,
"lastSend": 1691493318672,
"localSocket": 94434869107632,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "fdcf:5771:404::1/9993",
"expired": false,
"lastReceive": 1691493318673,
"lastSend": 1691493318672,
"localSocket": 94434869092560,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "fdcf:5771:404::1/9993",
"expired": false,
"lastReceive": 1691493318673,
"lastSend": 1691493318672,
"localSocket": 94434869086096,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.1/53571",
"expired": false,
"lastReceive": 1691493318673,
"lastSend": 1691493318672,
"localSocket": 94434869092208,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.1/53571",
"expired": false,
"lastReceive": 1691493318673,
"lastSend": 1691493318672,
"localSocket": 94434869109504,
"preferred": false,
"trustedPathId": 0
},
{
"active": true,
"address": "192.168.56.1/53571",
"expired": false,
"lastReceive": 1691493318673,
"lastSend": 1691493318672,
"localSocket": 94434869108304,
"preferred": false,
"trustedPathId": 0
}
],
"role": "LEAF",
"tunneled": false,
"version": "1.10.3",
"versionMajor": 1,
"versionMinor": 10,
"versionRev": 3
},
{
"address": "62f865ae71",
"isBonded": false,
"latency": 297,
"paths": [
{
"active": true,
"address": "50.7.252.138/9993",
"expired": false,
"lastReceive": 1691493263920,
"lastSend": 1691493323677,
"localSocket": 94434869079296,
"preferred": true,
"trustedPathId": 0
}
],
"role": "PLANET",
"tunneled": false,
"version": "-1.-1.-1",
"versionMajor": -1,
"versionMinor": -1,
"versionRev": -1
},
{
"address": "778cde7190",
"isBonded": false,
"latency": 276,
"paths": [
{
"active": true,
"address": "103.195.103.66/9993",
"expired": false,
"lastReceive": 1691493263899,
"lastSend": 1691493323677,
"localSocket": 94434869085344,
"preferred": true,
"trustedPathId": 0
}
],
"role": "PLANET",
"tunneled": false,
"version": "-1.-1.-1",
"versionMajor": -1,
"versionMinor": -1,
"versionRev": -1
},
{
"address": "cafe04eba9",
"isBonded": false,
"latency": 163,
"paths": [
{
"active": true,
"address": "84.17.53.155/9993",
"expired": false,
"lastReceive": 1691493263786,
"lastSend": 1691493327124,
"localSocket": 94434869086304,
"preferred": true,
"trustedPathId": 0
}
],
"role": "PLANET",
"tunneled": false,
"version": "-1.-1.-1",
"versionMajor": -1,
"versionMinor": -1,
"versionRev": -1
},
{
"address": "cafe9efeb9",
"isBonded": false,
"latency": 241,
"paths": [
{
"active": true,
"address": "104.194.8.134/9993",
"expired": false,
"lastReceive": 1691493263864,
"lastSend": 1691493323677,
"localSocket": 94434869086304,
"preferred": true,
"trustedPathId": 0
}
],
"role": "PLANET",
"tunneled": false,
"version": "-1.-1.-1",
"versionMajor": -1,
"versionMinor": -1,
"versionRev": -1
}
]

0 comments on commit e07d13d

Please sign in to comment.