Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- from __future__ import print_function
- import json
- import os
- import sys
- if len(sys.argv) != 2:
- print('usage: ' + sys.argv[0] + ' /path/to/peers')
- sys.exit(1)
- peersDir = sys.argv[1]
- def normalizeMac(mac):
- mac = mac.lower()
- normalized = ''
- n = 0
- for c in mac:
- if c != ':':
- if n > 0 and n % 2 == 0:
- normalized = normalized + ':'
- normalized = normalized + c
- n += 1
- return normalized
- def toAlias(peer):
- alias = {}
- if not (peer.has_key('name') and peer.has_key('mac')):
- return None
- name = peer['name']
- mac = peer['mac']
- alias['node_id'] = mac.replace(':', '')
- alias['hostname'] = name
- if peer.has_key('geo'):
- geo = peer['geo']
- location = {}
- if geo.has_key('lon'): location['longitude'] = geo['lon']
- if geo.has_key('lat'): location['latitude'] = geo['lat']
- alias['location'] = location
- alias['network'] = {}
- alias['network']['mesh_interfaces'] = [mac]
- return alias
- aliases = []
- for filename in os.listdir(peersDir):
- if len(filename) == 0 or filename[0] == '.':
- continue
- isGateway = False
- absFilename = peersDir + '/' + filename
- if os.path.isfile(absFilename):
- peerFile = open(absFilename, 'r')
- try:
- peerLines = peerFile.readlines()
- peer = {}
- for line in peerLines:
- parts = line.split()
- if len(parts) > 2:
- if parts[1] == 'Knotenname:':
- peer['name'] = parts[2]
- elif parts[0] == 'remote':
- isGateway = True
- elif parts[1] == 'MAC:':
- peer['mac'] = normalizeMac(parts[2])
- elif parts[1] == 'Koordinaten:' and len(parts) > 3:
- try:
- peer['geo'] = {'lat': float(parts[2]), 'lon': float(parts[3])}
- except ValueError:
- print('Error in %s: Invalid coordinates: %s' % (absFilename, parts[2:4]), file = sys.stderr)
- elif len(parts) == 2 and parts[0] == 'key':
- keyParts = parts[1].split('"')
- if len(keyParts) > 1:
- peer['vpn'] = keyParts[1].lower()
- if isGateway:
- continue
- alias = toAlias(peer)
- if alias:
- aliases.append(alias)
- except Exception as e:
- print('Error in %s, ignoring peer: %s' % (absFilename, e), file = sys.stderr)
- finally:
- peerFile.close()
- print(json.dumps(aliases))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement