#!/usr/bin/env python3 # # Copyright 6WIND, 2017 # import sys from os import path import pyrad.packet from pyrad.dictionary import Dictionary from pyrad.server import Server, RemoteHost def print_attributes(packet): print('Attributes') for key, value in packet.items(): print(f'{key}: {value}') class FakeCoA(Server): def HandleCoaPacket(self, packet): '''Accounting packet handler. Function that is called when a valid accounting packet has been received. :param packet: packet to process :type packet: Packet class instance ''' print('Received a coa request %d' % packet.code) print_attributes(packet) reply = self.CreateReplyPacket(packet) # try ACK or NACK # reply.code = packet.CoANAK reply.code = packet.CoAACK self.SendReplyPacket(packet.fd, reply) def HandleDisconnectPacket(self, packet): print('Received a disconnect request %d' % packet.code) print_attributes(packet) reply = self.CreateReplyPacket(packet) # try ACK or NACK # reply.code = packet.DisconnectNAK reply.code = pyrad.packet.DisconnectACK self.SendReplyPacket(packet.fd, reply) def main(path_to_dictionary, coa_port): # create server/coa only and read dictionary # bind and listen only on 127.0.0.1:argv[1] coa = FakeCoA( addresses=['127.0.0.1'], dict=Dictionary(path_to_dictionary), coaport=coa_port, auth_enabled=False, acct_enabled=False, coa_enabled=True) # add peers (address, secret, name) coa.hosts['127.0.0.1'] = RemoteHost( '127.0.0.1', b'Kah3choteereethiejeimaeziecumi', 'localhost') # start coa.Run() if __name__ == '__main__': if len(sys.argv) != 2: print('usage: client-coa.py {portnumber}') sys.exit(1) dictionary = path.join(path.dirname(path.abspath(__file__)), 'dictionary') main(dictionary, int(sys.argv[1]))