class RadiusReq(object): def __init__(self, config): self.logger = logging.getLogger(__name__) dictfile = os.path.dirname( os.path.realpath(__file__)) + "/raddictionary" self.client = Client( server=config['admin']['router_address'], secret=config['admin']['radius_secret'].encode('ascii'), dict=dictionary.Dictionary(dictfile)) def sendDisconnectPacket(self, user, session): params = {'User_Name': user, 'Acct_Session_Id': session} request = self.client.CreateCoAPacket(code=packet.DisconnectRequest, **params) result = self.client.SendPacket(request) if result.code != packet.DisconnectACK: self.logger.warning( 'Failed to disconnect %s. Got result %s with code %d', user, result, result.code) return False return True
def rad_disconnect(id_port: int): port = EqptPort.query.get(id_port) rad_acct = RadAcct.query \ .filter_by(username=port.radius_user, acctstoptime=None) \ .order_by( RadAcct.radacctid.desc() ).first() if rad_acct is not None: """ # TO-DO: Need testing ------------------------------------ """ acct_session_id = rad_acct.acctsessionid nas_ip_address = rad_acct.nasipaddress # create coa client client = RadClient( server=current_app.config['RADIUS_ADDRESS'], secret=current_app.config['RADIUS_SECRET'], dict=dictionary.Dictionary("dictionary") ) # set coa timeout client.timeout = current_app.config['RADIUS_TIMEOUT'] attr = { "Acct-Session-Id": acct_session_id, "User-Name": port.radius_user, "NAS-IP-Address": nas_ip_address, } # create coa request packet attributes = {k.replace("-", "_"): attr[k] for k in attr} request = client.CreateCoAPacket(code=packet.DisconnectRequest, **attributes) return client.SendPacket(request) # return 'Off CoA paket - need testing. User online.' else: return 'No active user session found. User offline.'
#!/usr/bin/python from __future__ import print_function from pyrad.client import Client from pyrad import dictionary from pyrad import packet import sys if len(sys.argv) != 4: print("usage: disconnect.py <host> <secret> <session-id>") sys.exit(1) ADDRESS = sys.argv[1] SECRET = sys.argv[2] ATTRIBUTES = {"Acct-Session-Id": sys.argv[3]} client = Client(server=ADDRESS, secret=SECRET, dict=dictionary.Dictionary("dictionary")) client.timeout = 30 attributes = {k.replace("-", "_"): ATTRIBUTES[k] for k in ATTRIBUTES} request = client.CreateCoAPacket(code=packet.DisconnectRequest, **attributes) result = client.SendPacket(request) print(result.code)
from pyrad.client import Client, Timeout from pyrad.dictionary import Dictionary dicts = Dictionary("/tmp/dictionaries") srv = Client(server='localhost', secret='adminsecret', dict=dicts) srv.timeout = 30 attributes = { "Alc-Subsc-ID-Str": "00:00:00:00:00:00", "Interim-Interval": 14400 } req = srv.CreateCoAPacket(**attributes) result = client.SendPacket(req) print result print result.code
#!/usr/bin/python from __future__ import print_function from pyrad.client import Client from pyrad import dictionary from pyrad import packet import sys if len(sys.argv) != 6: print ("usage: coa.py <host> <secret> <session-id> <ingress-policy> <egress-policy>") sys.exit(1) ADDRESS = sys.argv[1] SECRET = sys.argv[2] ATTRIBUTES = {"Acct-Session-Id": sys.argv[3]} ATTRIBUTES["ERX-Ingress-Policy-Name"] = sys.argv[4] ATTRIBUTES["ERX-Egress-Policy-Name"] = sys.argv[5] client = Client(server=ADDRESS, secret=SECRET, dict=dictionary.Dictionary("dictionary")) client.timeout = 30 attributes = {k.replace("-", "_"): ATTRIBUTES[k] for k in ATTRIBUTES} request = client.CreateCoAPacket(**attributes) result = client.SendPacket(request) print(result.code)