Start · Sprachen · PHP · Referenz · radius_put_addr

radius_put_addr

Funktion

Fügt einem RADIUS-Paket ein IP-Adress-Attribut im korrekten Binärformat hinzu.

seit PHP pecl_radius 1.1.0 Kategorie: misc

Signatur

radius_put_addr(resource $radius_handle, int $type, string $addr): bool

Beschreibung

radius_put_addr hängt ein IP-Adress-Attribut an das aktuell aufgebaute RADIUS-Paket an. Die übergebene IPv4-Adresse in menschenlesbarer Dotted-Decimal-Notation (z. B. 192.168.1.1) wird intern in das von RADIUS erwartete 4-Byte-Binärformat umgewandelt.

Typische Anwendungsfälle sind die Angabe der NAS-IP-Adresse (RADIUS_NAS_IP_ADDRESS), der Framed-IP-Adresse (RADIUS_FRAMED_IP_ADDRESS) oder anderer attributspezifischer IP-Adressen im Rahmen von Authentifizierungs- oder Accounting-Anfragen. Die Funktion muss nach radius_create_request und vor radius_send_request aufgerufen werden.

Im Gegensatz zu radius_put_string übernimmt radius_put_addr die korrekte Kodierung des Adresswertes, sodass kein manuelles inet_pton oder Ähnliches erforderlich ist. Bei einem Fehler kann die Fehlermeldung über radius_strerror abgerufen werden.

Parameter

Name Typ Default Beschreibung
$radius_handle Pflicht resource Das RADIUS-Handle, das zuvor mit radius_auth_open oder radius_acct_open erzeugt wurde.
$type Pflicht int Der Attribut-Typ als Integer-Konstante, z. B. RADIUS_NAS_IP_ADDRESS oder RADIUS_FRAMED_IP_ADDRESS.
$addr Pflicht string Die IPv4-Adresse in Dotted-Decimal-Notation, z. B. '192.168.0.1'. Die Funktion konvertiert diese intern in das Binärformat.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück. Im Fehlerfall wird false zurückgegeben; die genaue Ursache kann mit radius_strerror($radius_handle) abgerufen werden.

Beispiele

NAS-IP-Adresse einer Authentifizierungsanfrage hinzufügen

<?php
$radius = radius_auth_open();

if (!radius_add_server($radius, '10.0.0.1', 1812, 'geheim', 3, 3)) {
    die('Fehler beim Hinzufügen des Servers: ' . radius_strerror($radius));
}

if (!radius_create_request($radius, RADIUS_ACCESS_REQUEST)) {
    die('Anfrage konnte nicht erstellt werden: ' . radius_strerror($radius));
}

// Benutzername setzen
radius_put_string($radius, RADIUS_USER_NAME, 'testuser');

// NAS-IP-Adresse als IP-Attribut hinzufügen
if (!radius_put_addr($radius, RADIUS_NAS_IP_ADDRESS, '192.168.1.100')) {
    die('Fehler beim Setzen der NAS-IP: ' . radius_strerror($radius));
}

$result = radius_send_request($radius);
if ($result === RADIUS_ACCESS_ACCEPT) {
    echo 'Authentifizierung erfolgreich.';
} else {
    echo 'Authentifizierung abgelehnt oder Fehler.';
}

radius_close($radius);
Authentifizierung erfolgreich.

Framed-IP-Adresse in einer Accounting-Anfrage setzen

<?php
$radius = radius_acct_open();

if (!radius_add_server($radius, '10.0.0.1', 1813, 'geheim', 3, 3)) {
    die('Server-Fehler: ' . radius_strerror($radius));
}

if (!radius_create_request($radius, RADIUS_ACCOUNTING_REQUEST)) {
    die('Anfrage-Fehler: ' . radius_strerror($radius));
}

radius_put_string($radius, RADIUS_USER_NAME, 'testuser');
radius_put_int($radius, RADIUS_ACCT_STATUS_TYPE, RADIUS_START);

// Dem Nutzer zugewiesene IP-Adresse im Accounting-Paket übermitteln
if (!radius_put_addr($radius, RADIUS_FRAMED_IP_ADDRESS, '10.10.5.42')) {
    die('IP-Attribut konnte nicht gesetzt werden: ' . radius_strerror($radius));
}

$res = radius_send_request($radius);
echo ($res === RADIUS_ACCOUNTING_RESPONSE)
    ? 'Accounting-Anfrage akzeptiert.'
    : 'Accounting fehlgeschlagen.';

radius_close($radius);
Accounting-Anfrage akzeptiert.

// Wichtig · Fallstricke

Nur IPv4: radius_put_addr unterstützt ausschließlich IPv4-Adressen im Dotted-Decimal-Format. Für IPv6-Adressen müssen herstellerspezifische Attribute und radius_put_attr mit manuell konvertierten Bytes (via inet_pton) verwendet werden.

Die Funktion gehört zur PECL-Extension radius. Sie ist nicht im PHP-Kern enthalten und muss separat installiert werden (pecl install radius). Seit PHP 8 ist die Unterstützung für diese Extension eingeschränkt; für moderne Projekte empfiehlt sich eine alternative RADIUS-Bibliothek.