W3docs

Função PHP getservbyport(): Tudo o Que Você Precisa Saber

Saiba como usar a função PHP getservbyport() para obter o nome do serviço associado a um número de porta e protocolo de rede.

A função PHP getservbyport() converte uma porta de rede numérica no nome de serviço legível por humanos registrado para ela — por exemplo, a porta 80 se torna http e a porta 443 se torna https. É o inverso de getservbyname(), que faz o caminho oposto (nome → porta). Esta página explica a sintaxe, de onde vêm os dados, armadilhas comuns e como usar a função em código real.

O que getservbyport() faz

getservbyport() busca o nome de serviço bem conhecido que um sistema operacional associa a um par porta/protocolo específico. Ela não abre um socket, não contata um servidor e não faz varreduras — simplesmente lê uma tabela de consulta local mantida pelo sistema operacional:

  • No Linux e macOS, a tabela é o arquivo /etc/services.
  • No Windows, é %WINDIR%\System32\drivers\etc\services.

Como a resposta vem de um arquivo estático, a função é rápida e funciona offline, mas só conhece as portas listadas nesse arquivo. Uma porta de aplicação personalizada (por exemplo, 8080 executando seu servidor de desenvolvimento) geralmente retornará false porque nenhum nome de serviço está registrado para ela.

Sintaxe

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

Parâmetros

  • $port — o número da porta a ser consultado, como inteiro (por exemplo 80, 443, 22).
  • $protocol — o nome do protocolo, "tcp" ou "udp". Ao contrário do que algumas referências sugerem, este argumento é obrigatório, não opcional. O mesmo número de porta pode mapear para nomes de serviço diferentes dependendo do protocolo.

Valor de retorno

  • O nome do serviço como string (por exemplo "http") quando uma correspondência é encontrada.
  • false quando o par porta/protocolo não está registrado. Sempre teste o resultado com a comparação estrita === false, pois um nome de serviço válido poderia ser confundido com um valor falso.

Exemplo básico

php— editable, runs on the server

Aqui consultamos o serviço TCP na porta 80. Em um sistema padrão, a busca é bem-sucedida e imprime:

The service name for port number 80 and protocol name tcp is http

Como comparamos com === false, uma porta não registrada é reportada de forma clara em vez de produzir uma mensagem confusa.

Consultando várias portas

Quando você tem uma lista de portas — por exemplo, para rotular entradas em um log de firewall — itere sobre elas e resolva cada uma:

<?php

$ports = [22, 25, 53, 443, 49152];

foreach ($ports as $port) {
  $service = getservbyport($port, "tcp");
  echo $service === false
    ? "Port $port/tcp: unknown service\n"
    : "Port $port/tcp: $service\n";
}

Saída típica (a porta 49152 está no intervalo privado/dinâmico e não é um serviço registrado, portanto cai no ramo "unknown"):

Port 22/tcp: ssh
Port 25/tcp: smtp
Port 53/tcp: domain
Port 443/tcp: https
Port 49152/tcp: unknown service

Quando usar (e quando não usar)

Use getservbyport() quando quiser um rótulo amigável para uma porta conhecida: renderizar arquivos de log, construir um painel de rede ou validar configurações. Não é uma forma de verificar se uma porta está aberta ou em uso — ela nunca toca a rede. Para testar conectividade, você precisa de uma função de socket real como fsockopen().

Armadilhas comuns

  • Esquecer o argumento de protocolo. getservbyport(80) gera um erro; sempre passe "tcp" ou "udp".
  • Esperar que portas personalizadas sejam resolvidas. Portas fora de /etc/services retornam false mesmo que um servidor esteja ouvindo nelas.
  • Comparação fraca. Use === false, não == false ou !$result, para que casos extremos com string vazia não sejam interpretados incorretamente.

Funções relacionadas

  • getservbyname() — a busca inversa, de nome de serviço para número de porta.
  • getprotobyname() — resolve um nome de protocolo (como "tcp") para seu número de protocolo.
  • gethostbyname() — resolve um nome de host para um endereço IPv4.
  • fsockopen() — abre uma conexão de rede real para um host e porta.

Conclusão

getservbyport() é um auxiliar pequeno mas útil que traduz um par porta/protocolo para seu nome de serviço registrado lendo o arquivo de serviços do sistema. Lembre-se de que o argumento de protocolo é obrigatório, que portas desconhecidas retornam false e que a função realiza uma consulta local em vez de qualquer atividade de rede. Combine-a com getservbyname() para a direção inversa e com fsockopen() quando você precisar realmente se comunicar com um serviço.

Prática

Prática
What does the getservbyport() function in PHP do?
What does the getservbyport() function in PHP do?
Was this page helpful?