Start · Sprachen · PHP · Referenz · getservbyport

getservbyport

Funktion

Gibt den Namen des Internet-Dienstes zurück, der einem bestimmten Port und Protokoll zugeordnet ist.

seit PHP 4.0.0 Kategorie: http

Signatur

getservbyport(int $port, string $protocol): string|false

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 80http oder 443https. 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

Typ
string|false
Beschreibung
Gibt den Dienstnamen als Zeichenkette zurück (z. B. '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";
    }
}
Port 21/tcp => ftp Port 22/tcp => ssh Port 25/tcp => smtp Port 53/tcp => domain Port 80/tcp => http Port 443/tcp => https Port 3306/tcp => mysql

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);
Port 53/udp ist dem Dienst 'domain' zugeordnet. bool(false)

// 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.