getservbyname / getservbyport în PHP

Rețea PHP 4+

Află portul standard al unui serviciu (http, ssh, smtp) sau, cu getservbyport, serviciul unui port.

Sintaxă
getservbyname(string $service, string $protocol): int|false

Ce face getservbyname / getservbyport

Serviciile de rețea au porturi standard: http 80, https 443, ssh 22, smtp 25. getservbyname caută portul după numele serviciului, iar getservbyport face căutarea inversă.

Informațiile vin din fișierul de sistem /etc/services, nu din rețea, deci răspunsul este imediat. Protocolul este "tcp" sau "udp".

Parametri

Parametru Descriere
$service Numele serviciului, de exemplu "https". La getservbyport: numărul portului.
$protocol "tcp" sau "udp".

Ce returnează

getservbyname: portul sau false. getservbyport: numele serviciului sau false.

Exemple

Exemplul 1: Porturile câtorva servicii

<?php
foreach (["http", "https", "ssh", "smtp"] as $serviciu) {
    echo "$serviciu: " . getservbyname($serviciu, "tcp") . "\n";
}
var_dump(getservbyname("serviciu-inventat", "tcp"));

Rezultat

http: 80
https: 443
ssh: 22
smtp: 25
bool(false)

Exemplul 2: Ce serviciu folosește un port

<?php
foreach ([21, 443, 3306] as $port) {
    echo "$port: " . getservbyport($port, "tcp") . "\n";
}

Rezultat

21: ftp
443: https
3306: mysql

Greșeli frecvente

  • Crezi că funcția verifică dacă serviciul rulează pe server. Doar citește tabelul de porturi standard. Pentru o verificare reală, încearcă o conexiune cu fsockopen.

Comenzi înrudite

  • getprotobyname / getprotobynumber: Află numărul unui protocol de rețea după nume (tcp = 6) sau, cu getprotobynumber, numele după număr.
  • fsockopen / pfsockopen: Deschide o conexiune TCP (sau UDP, SSL) către un server și o returnează ca stream, pentru fwrite și fgets.