import argparse from pathlib import Path from at.dhcp import parse_isc_dhcpd_leases from time import time def list(): parser = argparse.ArgumentParser() parser.add_argument("leases", type=Path, help="leases file") parser.add_argument("--timeout", type=int, default=None, help="timeout in minutes") args = parser.parse_args() with open(args.leases) as f: offset, devices = parse_isc_dhcpd_leases(f) if args.timeout is not None: devices.purge_stale(args.timeout * 60) print("Found devices:") for device in devices._devices.values(): print(device._replace(atime = time() - device.atime)) import grpc from .tracker_pb2 import ClientsRequest from .tracker_pb2_grpc import DhcpTrackerStub def format_mac(raw: bytes) -> str: return ':'.join(f'{b:02x}' for b in raw) def tracker_list(): parser = argparse.ArgumentParser() parser.add_argument("address", default='unix:///tmp/checkinator.sock', nargs='?', help="tracker grpc address") parser.add_argument("--timeout", type=int, default=None, help="timeout in minutes") args = parser.parse_args() with grpc.insecure_channel(args.address) as channel: stub = DhcpTrackerStub(channel) response = stub.GetClients(ClientsRequest()) for client in response.clients: print(format_mac(client.hw_address), client.last_seen, client.ip_address, client.client_hostname )