Target: 2.6.0 (Tier 4 — AAA & infrastructure services)
Context
RADIUS is the dominant AAA protocol, UDP ports 1812/1813
(authentication/accounting; legacy 1645/1646 still seen). Fixed
header plus a flat TLV attribute list — no nesting, the simplest of
this tier's two TLV-based protocols (the other is STUN, this same
tier).
Deliverable
Add netprotocols.RADIUS (layer 7, dispatched from udp.port):
- Decode the 20-byte header (RFC 2865 §3): Code (1 byte), Identifier
(1 byte), Length (2 bytes), Authenticator (16 bytes, opaque —
computing/verifying it requires the shared secret, out of scope).
- Decode the Attribute list (Type 1 byte, Length 1 byte including the
2-byte TLV header, Value) via _tlv.py's walk_kind_length_value.
- Name the most common attribute types: User-Name (1), User-Password
(2, keep raw — it's obfuscated with the shared secret, not
decodable without it), NAS-IP-Address (4), NAS-Port (5),
Framed-IP-Address (8), Vendor-Specific (26, keep raw — vendor TLVs
nested inside are a follow-up, not this issue).
- Register
udp.port 1812 and 1813 → RADIUS, best-effort like every
other port-table entry.
Acceptance criteria
References
RFC 2865 · TLV walker: _tlv.py
Part of #174
Target: 2.6.0 (Tier 4 — AAA & infrastructure services)
Context
RADIUS is the dominant AAA protocol, UDP ports 1812/1813
(authentication/accounting; legacy 1645/1646 still seen). Fixed
header plus a flat TLV attribute list — no nesting, the simplest of
this tier's two TLV-based protocols (the other is STUN, this same
tier).
Deliverable
Add
netprotocols.RADIUS(layer 7, dispatched fromudp.port):(1 byte), Length (2 bytes), Authenticator (16 bytes, opaque —
computing/verifying it requires the shared secret, out of scope).
2-byte TLV header, Value) via
_tlv.py'swalk_kind_length_value.(2, keep raw — it's obfuscated with the shared secret, not
decodable without it), NAS-IP-Address (4), NAS-Port (5),
Framed-IP-Address (8), Vendor-Specific (26, keep raw — vendor TLVs
nested inside are a follow-up, not this issue).
udp.port1812 and 1813 →RADIUS, best-effort like everyother port-table entry.
Acceptance criteria
RADIUSdecodes the header and attribute list;bytes(RADIUS.decode(x)) == x.correctly shaped but raw.
RADIUS.truncation.
References
RFC 2865 · TLV walker:
_tlv.pyPart of #174