Signatur
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
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";
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);
Unbekanntes Protokoll abfangen
<?php
$result = getprotobyname('unbekannt');
if ($result === false) {
echo "Protokoll nicht gefunden.\n";
} else {
echo "Protokollnummer: $result\n";
}
// 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.