Skip to main content

Python RADIUS toolkit (client, server, RadSec, RADIUS/1.1)

Project description

pyrad2

Tests python pre-commit Code style: ruff Checked with mypy

A modern Python toolkit for building RADIUS clients and servers.

pyrad2 gives you the protocol - packet encoding, dictionary parsing, transport handling, retransmission, TLS - so you can write the business logic. Build an authentication backend, a CoA proxy, a RadSec accounting collector, or a network-access controller without touching wire formats.

📚 Full documentation: nicholasamorim.github.io/pyrad2

Install

pip install pyrad2     # or: uv add pyrad2

Requires Python 3.12+.

Quick look

from pyrad2.client_async import ClientAsync
from pyrad2.dictionary import Dictionary
from pyrad2.constants import PacketType

client = ClientAsync(server="radius.example.com", secret=b"...", dict=Dictionary("dictionary"))
await client.initialize_transports(enable_auth=True)

req = client.create_auth_packet(User_Name="alice", User_Password="hunter2")
reply = await client.send_packet(req)

if reply.code == PacketType.AccessAccept:
    print("Welcome,", reply["User-Name"][0])

Head to the Getting Started guide for the full walkthrough.

What's in the box

Feature Spec
RADIUS client & server (sync + async) RFC 2865
RadSec - RADIUS over TLS RFC 6614
RADIUS/1.1 over RadSec (experimental) RFC 9765
CoA & Disconnect (Dynamic Authorization) RFC 5176
Status-Server health checks RFC 5997
Duplicate detection / response cache RFC 5080 §2.2.2
FreeRADIUS dictionary support Extended attributes, vendor formats, EVS
Wire-level packet tracing PYRAD2_TRACE=1

pyrad2 is a library, not a daemon. It is not a drop-in replacement for FreeRADIUS; it gives you the moving parts to build your own.

See it run

Two complementary surfaces ship with the repo:

  • scenarios/ - single-process, end-to-end demos. A server and a client run in the same event loop so the full exchange shows up on one log. Don't edit them - they're runnable explanations.
  • examples/ - operational scripts you copy into your project and edit.
make demo                  # all scenarios sequentially

make scenario_auth         # Access-Request → Access-Accept (UDP)
make scenario_acct         # Accounting-Request → Accounting-Response
make scenario_coa          # CoA-Request → CoA-ACK (RFC 5176)
make scenario_status       # Status-Server health check (RFC 5997)
make scenario_dedup        # Duplicate detection (RFC 5080)
make scenario_radsec       # RadSec over mutual TLS (RFC 6614)
make scenario_radsec_v11   # RADIUS/1.1 over RadSec (RFC 9765)

Watch the actual bytes on the wire by setting PYRAD2_TRACE=1 on any script:

PYRAD2_TRACE=1 make scenario_auth

Documentation

Tests

make test

Author, Copyright, Availability

pyrad2 is currently maintained by Nicholas Amorim.

pyrad was written by Wichert Akkerman and is maintained by Christian Giese (GIC-de) and Istvan Ruzman (Istvan91).

This project is licensed under a BSD license. Copyright and license information can be found in LICENSE.txt.

Bugs and wishes can be submitted in the pyrad2 issue tracker on GitHub. PRs are very welcome.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyrad2-3.0.tar.gz (141.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyrad2-3.0-py3-none-any.whl (84.1 kB view details)

Uploaded Python 3

File details

Details for the file pyrad2-3.0.tar.gz.

File metadata

  • Download URL: pyrad2-3.0.tar.gz
  • Upload date:
  • Size: 141.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for pyrad2-3.0.tar.gz
Algorithm Hash digest
SHA256 f20be3e26826c0d9c2f9c773d2cfcba727f801486df8a5e512a9f270092729f9
MD5 10163746cacfe8038eea38691be193d8
BLAKE2b-256 d8e1f501c5731eca28aca83c39d75187b6c4305f88c01c33f1d8ce2bfad2800f

See more details on using hashes here.

File details

Details for the file pyrad2-3.0-py3-none-any.whl.

File metadata

  • Download URL: pyrad2-3.0-py3-none-any.whl
  • Upload date:
  • Size: 84.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for pyrad2-3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2711c7979d5ee993a9c326001255893dbdf083444c16ba8e65bdee96ad34e153
MD5 32dee9f2e4bfe5b608bf2875a08ad2bc
BLAKE2b-256 b371f9271338bf3b3876b88e1c0fffd8b88c4cb17a810d9269aea477fabcc808

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page