Signatur
Beschreibung
getservbyport() durchsucht die systemeigene Dienste-Datenbank (unter Unix typischerweise /etc/services) nach dem Eintrag, der dem angegebenen Port und Protokoll entspricht, und gibt den zugehörigen Dienstnamen als Zeichenkette zurück.
Die Funktion ist nützlich, wenn man eine rohe Port-Nummer in einen lesbaren Dienstnamen übersetzen möchte, zum Beispiel 80 → http oder 443 → https. Das ist vor allem beim Protokollieren von Netzwerkverbindungen oder bei der Diagnose von Netzwerkproblemen hilfreich.
Das Gegenstück getservbyname() macht die umgekehrte Übersetzung — von einem Dienstnamen zu einer Port-Nummer. Beide Funktionen arbeiten plattformabhängig und liefern nur Ergebnisse für Dienste, die im Betriebssystem registriert sind.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $port Pflicht | int | Die Port-Nummer, für die der Dienstname gesucht werden soll (z. B. 80, 443, 21). |
|
| $protocol Pflicht | string | Das Transportprotokoll, entweder 'tcp' oder 'udp'. Die Groß-/Kleinschreibung spielt keine Rolle. |
Rückgabewert
'http'), wenn ein passender Eintrag gefunden wurde. Gibt false zurück, wenn kein Dienst für die angegebene Kombination aus Port und Protokoll bekannt ist.Beispiele
Bekannte Ports in Dienstnamen übersetzen
<?php
$ports = [21, 22, 25, 53, 80, 443, 3306];
foreach ($ports as $port) {
$name = getservbyport($port, 'tcp');
if ($name !== false) {
echo "Port $port/tcp => $name\n";
} else {
echo "Port $port/tcp => unbekannt\n";
}
}
UDP-Dienst ermitteln und Fehlerfall abfangen
<?php
$port = 53;
$protocol = 'udp';
$service = getservbyport($port, $protocol);
if ($service !== false) {
echo "Port {$port}/{$protocol} ist dem Dienst '{$service}' zugeordnet.\n";
} else {
echo "Kein bekannter Dienst für Port {$port}/{$protocol} gefunden.\n";
}
// Unbekannter Port
$unknown = getservbyport(99999, 'tcp');
var_dump($unknown);
// Wichtig · Fallstricke
Plattformabhängigkeit: Die zurückgegebenen Dienstnamen und die verfügbaren Port-Einträge hängen vom Betriebssystem ab. Unter Windows wird die Datei %SystemRoot%\System32\drivers\etc\services verwendet; unter Unix/Linux ist es /etc/services. Die Ergebnisse können sich zwischen Systemen unterscheiden.
Sicherheitshinweis: Die Funktion liefert lediglich einen Namen aus einer lokalen Systemdatei. Der tatsächlich auf einem Port lauschende Dienst muss nicht zwingend dem eingetragenen Standarddienst entsprechen. Verlasse dich für Sicherheitsentscheidungen niemals allein auf den zurückgegebenen Namen.
Für nicht registrierte oder proprietäre Ports gibt die Funktion false zurück. Ein Rückgabewert von false bedeutet nicht zwingend, dass der Port nicht genutzt wird.