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.