RADIUS is a protocol for remote user authentication, authorization and accounting (AAA). Its primary use is for Internet Service Providers, though it may as well be used on any network that needs a centralized authentication and/or accounting service for its workstations.
RADIUS is often used in larger Wi-Fi (wireless) networks for AAA purposes, replacing the simple shared key methods which are uncomfortable if a Wi-Fi network reaches a specific size.
The DIAMETER protocol is the designated successor, but RADIUS is still commonly used today.
RADIUS was originally specified in an RFI by Merit Network in 1991 to control dial-in access to NSFnet. Livingston Enterprises responded to the RFI with a description of a RADIUS server. Merit Network awarded the contract to Livingston Enterprises that delivered their PortMaster series of Network Access Servers and the initial RADIUS server to Merit. RADIUS was later (1997) published as RFC 2058 and RFC 2059 (current versions are RFC 2865 and RFC 2866)
UDP: RADIUS uses UDP as its underlying protocol. The registered UDP port for RADIUS traffic is 1812; the early deployment of RADIUS used UDP port 1645, which conflicted with the "datametrics" service. When RADIUS is used for accounting rather than authentication and configuration, the registered UDP port is 1813; the early deployment used port 1646, which conflicted with the "sa-msg-port" service.
XXX - Add example traffic here (as plain text or Wireshark screenshot).
RADIUS dissector is fully functional.
radius.shared_secret If not empty it will try to use the string given to decrypt encrypted AVPs (password)
Since version 0.10.12 the Radius dissector will try to load protocol information (Vendors, Attributes and Values) from the dictionary file located in the radius directory of either the user's directory or the defaults directory, and the files included by the dictionary file.
# The format of the dictionary (and the default dictionary) # is a subset of of FreeRADIUS'. # # Valid data types for attributes are: # # string - 0-253 octets # ipaddr - 4 octets in network byte order # integer - 32 bit value in big endian order (high byte first) # (wireshark uses this type for non-standard 1-2-3 and 8 byte integers as well) # date - 32 bit value in big endian order - seconds since # 00:00:00 GMT, Jan. 1, 1970 # ifid - 8 octets in network byte order # ipv6addr - 16 octets in network byte order # ipv6prefix - 18 octets in network byte order # octets - raw octets, printed as hex strings # include another dictionary file from this directory $INCLUDE dictionary.juniper VENDOR Cosine 3085 VENDOR Cisco 9 BEGIN-VENDOR Cosine ATTRIBUTE Cosine-Connection-Profile-Name 1 string ATTRIBUTE Cosine-VPI-VCI 5 octets ATTRIBUTE Cosine-DLCI 6 integer END-VENDOR Cosine # standard avps ATTRIBUTE User-Name 1 string # encrypted avps ATTRIBUTE Password 2 string encrypt=1 # avps with tag ATTRIBUTE Tunnel-Type 64 integer has_tag ATTRIBUTE Tunnel-Password 69 string has_tag,encrypt=2 # single vendor avps ATTRIBUTE Cisco-Disconnect-Cause 195 integer Cisco # Values are declared VALUE Tunnel-Type PPTP 1 VALUE Tunnel-Type L2F 2 VALUE Tunnel-Type L2TP 3 VALUE Tunnel-Type ATMP 4 VALUE Tunnel-Type VTP 5 VALUE Tunnel-Type AH 6 VALUE Tunnel-Type IP 7 VALUE Tunnel-Type MIN-IP 8 VALUE Tunnel-Type ESP 9 VALUE Tunnel-Type GRE 10 VALUE Tunnel-Type DVS 11 VALUE Tunnel-Type IP-in-IP 12 VALUE Tunnel-Type VLAN 13
Example capture file
XXX - Add a simple example capture file. Keep it short, it's also a good idea to gzip it to make it even smaller, as Wireshark can open gzipped files automatically.
A complete list of RADIUS display filter fields can be found in the display filter reference
Show only the RADIUS traffic:
Show only RADIUS Access-Request messages:
radius.code == 1
Show only RADIUS Access-Accept messages:
radius.code == 2
Show only RADIUS Access-Reject messages:
radius.code == 3
Show only RADIUS Accounting-Request[start] messages:
radius.Acct_Status_Type == 1
Show only RADIUS Accounting-Request[stop] messages:
radius.Acct_Status_Type == 2
Show only RADIUS response messages that take longer than two seconds from the request:
radius.time >= 2
Show only RADIUS Access-Reject messages that come with an Reply-Message attribute containing "password":
radius.code == 3 and radius.Reply_Message contains "password"
You cannot directly filter RADIUS protocols while capturing. However, if the RADIUS traffic is using one or more of the standard UDP ports (see above), you can filter on that port or ports.
Capture RADIUS authentication and configuration traffic over the assigned port (1812):
udp port 1812
Capture RADIUS accounting traffic over the assigned port (1813):
udp port 1813
Capture RADIUS authentication and configuration traffic, and RADIUS accounting traffic, over the assigned ports):
udp port 1812 or udp port 1813
RFC2865 Remote Authentication Dial In User Service (RADIUS)
RFC2866 RADIUS Accounting
RFC2867 RADIUS Accounting Modifications for Tunnel Protocol Support
RFC2868 RADIUS Attributes for Tunnel Protocol Support
RFC2869 RADIUS Extensions
See RadiusServers for information about various RADIUS server distributions.