Signatur
Beschreibung
getprotobynumber() sucht in der systemweiten Protokolldatenbank (unter Unix typischerweise /etc/protocols) nach dem Protokollnamen, der der angegebenen Protokollnummer zugeordnet ist. Die Funktion ist das Gegenstück zu getprotobyname(), die den umgekehrten Weg geht.
Typische Anwendungsfälle sind die Analyse von Netzwerkpaketen, die Auswertung von Socket-Verbindungsdaten oder die Ausgabe von menschenlesbaren Protokollnamen in Diagnose- und Monitoring-Werkzeugen. So lässt sich z. B. aus dem Rückgabewert von socket_get_option() oder ähnlichen Funktionen die Protokollnummer in einen lesbaren Namen umwandeln.
Die bekanntesten Protokollnummern sind 0 für ip, 6 für tcp und 17 für udp. Die tatsächlich verfügbaren Protokolle hängen vom Betriebssystem ab; auf Windows-Systemen ist die Funktion u. U. nicht verfügbar oder liefert eine eingeschränkte Liste.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $protocol Pflicht | int | Die Protokollnummer (z. B. 6 für TCP, 17 für UDP), deren zugehöriger Name ermittelt werden soll. |
Rückgabewert
string zurück, wenn die Protokollnummer in der Systemdatenbank gefunden wurde. Ist die Nummer unbekannt, wird false zurückgegeben.Beispiele
Protokollnummern in lesbare Namen umwandeln
<?php
$numbers = [0, 6, 17, 1, 41];
foreach ($numbers as $num) {
$name = getprotobynumber($num);
if ($name !== false) {
echo "Protokollnummer $num => $name\n";
} else {
echo "Protokollnummer $num => unbekannt\n";
}
}
Protokollname eines Raw-Sockets ermitteln
<?php
// Simuliert eine Protokollnummer, die z. B. aus einer Paketanalyse stammt
$protocolNumber = 6; // typischerweise aus Netzwerkdaten gelesen
$name = getprotobynumber($protocolNumber);
if ($name !== false) {
echo "Das Netzwerkpaket verwendet das Protokoll: " . strtoupper($name) . "\n";
} else {
echo "Unbekannte Protokollnummer: $protocolNumber\n";
}
// Wichtig · Fallstricke
Plattformabhängigkeit: Die Funktion liest die Protokollinformationen aus der Systemdatenbank des Betriebssystems. Unter Linux/macOS ist dies üblicherweise /etc/protocols. Unter Windows kann das Verhalten abweichen oder die Funktion steht nicht zur Verfügung – in diesem Fall sollte vor dem Aufruf function_exists('getprotobynumber') geprüft werden.
Der Rückgabewert sollte immer mit === false auf Fehler geprüft werden, da manche Protokollnamen als leerer String zurückgegeben werden könnten.