Start · Sprachen · PHP · Referenz · radius_cvt_addr

radius_cvt_addr

Funktion

Wandelt Rohdaten (Raw-Bytes) aus einem RADIUS-Attribut in eine lesbare IP-Adresse um.

Kategorie: misc

Signatur

radius_cvt_addr(string $data): string

Beschreibung

radius_cvt_addr() ist Bestandteil der PECL-Erweiterung radius und dient dazu, binäre Rohdaten, die über RADIUS-Attribute empfangen wurden, in eine menschenlesbare IPv4-Adresse im Format x.x.x.x umzuwandeln.

Im RADIUS-Protokoll werden IP-Adressen als 4-Byte-Binärstrings übertragen. Um diese Bytes korrekt anzuzeigen oder weiterzuverarbeiten, muss eine Konvertierung stattfinden. Diese Funktion übernimmt genau diese Aufgabe und erspart manuelle Bit-Operationen oder den Umweg über inet_ntop().

Typischerweise wird radius_cvt_addr() nach dem Lesen eines Attributs mit radius_get_attr() oder radius_get_vendor_attr() aufgerufen, wenn der Attributtyp RADIUS_IP_ADDRESS ist und der Rückgabewert als Rohdaten vorliegt.

Diese Funktion ist nur verfügbar, wenn die PECL-Erweiterung radius installiert und geladen ist.

Parameter

Name Typ Default Beschreibung
$data Pflicht string Ein 4-Byte-Binärstring, wie er aus einem RADIUS-Attribut vom Typ RADIUS_IP_ADDRESS stammt, z. B. geliefert von radius_get_attr().

Rückgabewert

Typ
string
Beschreibung
Gibt die IP-Adresse als lesbaren String im Format x.x.x.x zurück (z. B. 192.168.1.100).

Beispiele

IP-Adresse aus RADIUS-Attribut lesen und konvertieren

<?php
// RADIUS-Verbindung aufbauen
$res = radius_auth_open();
radius_add_server($res, '127.0.0.1', 1812, 'geheimes_secret', 3, 3);
radius_create_request($res, RADIUS_ACCESS_REQUEST);
radius_put_string_attr($res, RADIUS_USER_NAME, 'testuser');
radius_put_string_attr($res, RADIUS_USER_PASSWORD, 'passwort');

$reply = radius_send_request($res);

if ($reply === RADIUS_ACCESS_ACCEPT) {
    while ($attr = radius_get_attr($res)) {
        if ($attr['attr'] === RADIUS_FRAMED_IP_ADDRESS) {
            // Rohdaten in lesbare IP umwandeln
            $ip = radius_cvt_addr($attr['data']);
            echo "Zugewiesene IP-Adresse: " . $ip . PHP_EOL;
        }
    }
}

radius_close($res);
?>
Zugewiesene IP-Adresse: 10.0.0.42

Manuelle Konvertierung mit simulierten Rohdaten

<?php
// Simulierte Rohdaten: 4 Bytes für die IP 192.168.1.100
$rawData = pack('C4', 192, 168, 1, 100);

$ip = radius_cvt_addr($rawData);
echo "Konvertierte IP: " . $ip . PHP_EOL;
?>
Konvertierte IP: 192.168.1.100

// Wichtig · Fallstricke

Voraussetzung: Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung radius installiert ist. Sie ist nicht Bestandteil des PHP-Kerns und muss separat installiert werden (pecl install radius).

Datenlänge: Es wird ein exakt 4 Byte langer String erwartet (IPv4). Werden fehlerhafte oder zu kurze Daten übergeben, ist das Verhalten undefiniert. Eine Validierung der Attributlänge vor dem Aufruf ist empfehlenswert.

IPv6: Für IPv6-Adressen ist diese Funktion nicht geeignet. IPv6-Adressen in RADIUS sind 16 Byte lang und müssen anders verarbeitet werden, z. B. mit inet_ntop().