#!/usr/bin/env python3 import random import socket import sys from os import path import pyrad.packet from pyrad.client import Client from pyrad.dictionary import Dictionary def send_accounting_packet(srv, req): try: srv.SendPacket(req) except pyrad.client.Timeout: print("RADIUS server does not reply") sys.exit(1) except socket.error as error: print("Network error: " + error[1]) sys.exit(1) def main(path_to_dictionary): srv = Client( server="127.0.0.1", secret=b"Kah3choteereethiejeimaeziecumi", dict=Dictionary(path_to_dictionary), ) req = srv.CreateAcctPacket( **{ "User-Name": "wichert", "NAS-IP-Address": "192.168.1.10", "NAS-Port": 0, "NAS-Identifier": "trillian", "Called-Station-Id": "00-04-5F-00-0F-D1", "Calling-Station-Id": "00-01-24-80-B3-9C", "Framed-IP-Address": "10.0.0.100", } ) print("Sending accounting start packet") req["Acct-Status-Type"] = "Start" send_accounting_packet(srv, req) print("Sending accounting stop packet") req["Acct-Status-Type"] = "Stop" req["Acct-Input-Octets"] = random.randrange(2 ** 10, 2 ** 30) req["Acct-Output-Octets"] = random.randrange(2 ** 10, 2 ** 30) req["Acct-Session-Time"] = random.randrange(120, 3600) req["Acct-Terminate-Cause"] = random.choice( ["User-Request", "Idle-Timeout"] ) send_accounting_packet(srv, req) if __name__ == "__main__": dictionary = path.join(path.dirname(path.abspath(__file__)), "dictionary") main(dictionary)