Start · Sprachen · PHP · Referenz · getprotobyname

getprotobyname

Funktion

Gibt die offizielle Protokollnummer für einen gegebenen Protokollnamen (z. B. <code>tcp</code>, <code>udp</code>) zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

getprotobyname(string $protocol): int|false

Beschreibung

getprotobyname() durchsucht die systemweite Protokolldatenbank (unter Unix typischerweise /etc/protocols) nach dem angegebenen Protokollnamen und liefert die zugehörige Protokollnummer zurück. Diese Nummer entspricht dem Feld proto, das z. B. in Socket-Funktionen wie socket_create() benötigt wird.

Typische Protokollnamen sind tcp (Nummer 6), udp (Nummer 17), icmp (Nummer 1) oder ip (Nummer 0). Die Funktion ist das Gegenstück zu getprotobynumber(), die den umgekehrten Weg geht.

Die Funktion ist besonders nützlich, wenn ein Protokollname bekannt ist und die numerische ID für Low-Level-Netzwerkoperationen (z. B. Raw-Sockets oder Paketfilter) benötigt wird, ohne die Nummern hart zu kodieren.

Parameter

Name Typ Default Beschreibung
$protocol Pflicht string Der Name des Netzwerkprotokolls, z. B. tcp, udp oder icmp. Groß-/Kleinschreibung ist systemabhängig; auf den meisten Systemen werden Kleinbuchstaben erwartet.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Protokollnummer als int zurück, wenn der Protokollname in der Systemdatenbank gefunden wurde. Ist der Name unbekannt, wird false zurückgegeben.

Beispiele

Protokollnummer für TCP und UDP abfragen

<?php
$tcpNumber  = getprotobyname('tcp');
$udpNumber  = getprotobyname('udp');
$icmpNumber = getprotobyname('icmp');

echo "TCP:  $tcpNumber\n";
echo "UDP:  $udpNumber\n";
echo "ICMP: $icmpNumber\n";
TCP: 6 UDP: 17 ICMP: 1

Protokollnummer für socket_create() verwenden

<?php
$protoNumber = getprotobyname('tcp');

if ($protoNumber === false) {
    die('Protokoll nicht gefunden.');
}

$socket = socket_create(AF_INET, SOCK_STREAM, $protoNumber);

if ($socket === false) {
    die('Socket konnte nicht erstellt werden: ' . socket_strerror(socket_last_error()));
}

echo "Socket mit Protokollnummer $protoNumber erfolgreich erstellt.\n";
socket_close($socket);
Socket mit Protokollnummer 6 erfolgreich erstellt.

Unbekanntes Protokoll abfangen

<?php
$result = getprotobyname('unbekannt');

if ($result === false) {
    echo "Protokoll nicht gefunden.\n";
} else {
    echo "Protokollnummer: $result\n";
}
Protokoll nicht gefunden.

// Wichtig · Fallstricke

Die verfügbaren Protokollnamen und -nummern sind betriebssystemabhängig und werden aus der jeweiligen Systemdatenbank gelesen. Unter Windows wird die Registry bzw. die Datei %WINDIR%\system32\drivers\etc\protocol herangezogen; dort können die Namen abweichen.

Der Rückgabewert false sollte immer mit === false geprüft werden, da die Protokollnummer 0 (z. B. für ip) bei einer losen Prüfung mit == ebenfalls als falsy ausgewertet würde.