Signatur
Beschreibung
radius_create_request() initialisiert eine neue RADIUS-Anfrage des angegebenen Typs für einen zuvor erstellten RADIUS-Handle. Eine Anfrage muss erstellt werden, bevor Attribute hinzugefügt und die Anfrage schließlich an den RADIUS-Server gesendet werden kann.
Der $type-Parameter bestimmt, ob es sich um eine Authentifizierungsanfrage (RADIUS_ACCESS_REQUEST) oder eine Accounting-Anfrage (RADIUS_ACCOUNTING_REQUEST) handelt. Dies entspricht den Standard-RADIUS-Pakettypen gemäß RFC 2865 und RFC 2866.
Nach dem Aufruf von radius_create_request() können mit Funktionen wie radius_put_attr(), radius_put_string() oder radius_put_int() Attribute zur Anfrage hinzugefügt werden. Anschließend wird die Anfrage mit radius_send_request() an den Server übermittelt.
- Authentifizierung: Prüft Benutzername und Passwort gegen den RADIUS-Server.
- Accounting: Meldet Nutzungsdaten (z. B. Sitzungsdauer, übertragene Bytes) an den RADIUS-Server.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $radius_handle Pflicht | resource | Ein gültiger RADIUS-Handle, der zuvor mit radius_auth_open() oder radius_acct_open() erstellt wurde. |
|
| $type Pflicht | int | Der Typ der RADIUS-Anfrage. Gültige Werte sind RADIUS_ACCESS_REQUEST (1) für Authentifizierung und RADIUS_ACCOUNTING_REQUEST (4) für Accounting. |
Rückgabewert
true zurück, wenn die Anfrage erfolgreich erstellt wurde, oder false im Fehlerfall. Im Fehlerfall kann die Fehlermeldung mit radius_strerror() abgerufen werden.Beispiele
Authentifizierungsanfrage an einen RADIUS-Server senden
<?php
// RADIUS-Handle für Authentifizierung erstellen
$radius = radius_auth_open();
if (!$radius) {
die('Konnte RADIUS-Handle nicht erstellen');
}
// RADIUS-Server konfigurieren
if (!radius_add_server($radius, 'radius.example.com', 1812, 'geheimespasswort', 3, 3)) {
die('Fehler beim Hinzufügen des Servers: ' . radius_strerror($radius));
}
// Neue Authentifizierungsanfrage erstellen
if (!radius_create_request($radius, RADIUS_ACCESS_REQUEST)) {
die('Fehler beim Erstellen der Anfrage: ' . radius_strerror($radius));
}
// Attribute hinzufügen
radius_put_attr($radius, RADIUS_NAS_IP_ADDRESS, '192.168.1.1');
radius_put_string($radius, RADIUS_USER_NAME, 'testnutzer');
radius_put_string($radius, RADIUS_USER_PASSWORD, 'geheim123');
// Anfrage senden und Ergebnis auswerten
$result = radius_send_request($radius);
switch ($result) {
case RADIUS_ACCESS_ACCEPT:
echo 'Authentifizierung erfolgreich!' . PHP_EOL;
break;
case RADIUS_ACCESS_REJECT:
echo 'Authentifizierung abgelehnt.' . PHP_EOL;
break;
default:
echo 'Unerwartetes Ergebnis: ' . $result . PHP_EOL;
}
radius_close($radius);
Accounting-Anfrage (Start einer Sitzung) senden
<?php
// RADIUS-Handle für Accounting erstellen
$radius = radius_acct_open();
if (!$radius) {
die('Konnte RADIUS-Handle nicht erstellen');
}
// RADIUS-Server konfigurieren
if (!radius_add_server($radius, 'radius.example.com', 1813, 'geheimespasswort', 3, 3)) {
die('Fehler beim Hinzufügen des Servers: ' . radius_strerror($radius));
}
// Neue Accounting-Anfrage erstellen
if (!radius_create_request($radius, RADIUS_ACCOUNTING_REQUEST)) {
die('Fehler beim Erstellen der Anfrage: ' . radius_strerror($radius));
}
// Accounting-Attribute hinzufügen
radius_put_attr($radius, RADIUS_NAS_IP_ADDRESS, '192.168.1.1');
radius_put_string($radius, RADIUS_USER_NAME, 'testnutzer');
radius_put_int($radius, RADIUS_ACCT_STATUS_TYPE, RADIUS_START);
radius_put_string($radius, RADIUS_ACCT_SESSION_ID, 'SESS-00042');
// Anfrage senden
$result = radius_send_request($radius);
if ($result === RADIUS_ACCOUNTING_RESPONSE) {
echo 'Accounting-Start erfolgreich gemeldet.' . PHP_EOL;
} else {
echo 'Fehler beim Accounting: ' . radius_strerror($radius) . PHP_EOL;
}
radius_close($radius);
// Wichtig · Fallstricke
Erweiterung: Diese Funktion ist Teil der PECL-Erweiterung radius, die nicht standardmäßig in PHP enthalten ist. Sie muss separat über PECL installiert werden (pecl install radius).
Handle-Typ beachten: Verwende radius_auth_open() für Authentifizierungsanfragen und radius_acct_open() für Accounting-Anfragen. Das Mischen von Handle-Typ und Anfragentyp kann zu unerwarteten Fehlern führen.
Sicherheit: Das Shared Secret zwischen NAS und RADIUS-Server sollte ausreichend lang und zufällig sein. Die Kommunikation sollte nach Möglichkeit über gesicherte Netzwerke oder VPNs erfolgen, da RADIUS selbst kein starkes Verschlüsselungsprotokoll verwendet.