Start · Sprachen · PHP · Referenz · radius_create_request

radius_create_request

Funktion

Erstellt eine neue RADIUS-Accounting- oder Authentifizierungsanfrage für den angegebenen RADIUS-Handle.

seit PHP PECL radius >= 1.1.0 Kategorie: misc

Signatur

radius_create_request(resource $radius_handle, int $type): bool

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

Typ
bool
Beschreibung
Gibt 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);
Authentifizierung erfolgreich!

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);
Accounting-Start erfolgreich gemeldet.

// 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.