예제 #1
0
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
예제 #2
0
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.'
예제 #3
0
#!/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)
예제 #4
0
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
예제 #5
0
#!/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)