Quando me conecto a https://www.google.co.uk, isso muda para 216.58.198.228:443. Em seguida, uma conexão comigo é aberta em [Meu endereço IP]: 63998.
Minha pergunta é como a porta 63998 é escolhida e existe uma maneira de forçá-la a ser 63999.
networking
port
tcp
TheGathron
fonte
fonte
Respostas:
Como são determinadas as portas locais
O número da porta é escolhido pelo software de implementação TCP a partir de um intervalo de números de portas chamado Portas Efêmeras .
O mecanismo exato para escolher o número da porta e o intervalo a ser usado depende do sistema operacional.
Existe uma maneira de forçá-lo a ser 63999.
Isso pode ser feito alterando a configuração do software de implementação TCP.
Instruções para configurar o intervalo de portas efêmeras para uma variedade de sistemas operacionais podem ser encontradas em Alterando o intervalo de portas efêmeras .
No entanto, não é uma boa ideia restringir o intervalo a uma única porta, por exemplo
63999
.De fato, no Windows, isso não é possível como:
A escala efêmera do porto
Fonte A Faixa de Portas Efêmeras
Alterando o intervalo de portas efêmeras
Linux:
Windows Vista / Windows Server 2008 e mais recente:
Origem Alterando o intervalo de portas efêmeras
Artigo 929851 da Base de Conhecimento Microsoft de origem :
Windows XP e mais antigo:
Origem Alterando o intervalo de portas efêmeras
fonte
bind
sistema antes de ligarconnect
. Alguns aplicativos têm uma opção para fazer isso, outros não.A resposta de David Postill está perfeitamente correta. Gostaria apenas de acrescentar, enfatizando que alterar o intervalo de portas efêmeras no Linux é tão simples que o OP tem uma resposta afirmativa.
Você altera o EPR da seguinte maneira:
e você pode selecionar a porta 50000 (como exemplo) com o seguinte script:
Uma ressalva aqui: como existe uma única porta no intervalo, outro aplicativo pode arrancá-la de você entre a execução da terceira e quarta linhas acima; Além disso, mesmo se não houver condição de corrida, você paralisará todos os outros aplicativos até restaurar um EPR grande, motivo pelo qual restaurei o intervalo original o mais rápido possível.
Portanto, se o sistema operacional dos OPs fosse Linux, a resposta seria que isso poderia ser feito com facilidade.
Surpreendentemente, isso não é tão simples nos BSDs, alguns dos quais nem têm uma configuração de kernel de tempo de execução para o EPR. MacOS X, FreeBSD e OpenBSD requerem a modificação do arquivo /etc/sysctl.conf , mas eles têm opções diferentes para o EPR.
Independentemente do exposto e do sistema operacional, o fato de que algo pode ser feito não significa que deve ser feito: por que diabos você precisa disso? Não consigo pensar em um único caso de uso.
fonte
BIND_PORT
opcional, de modo que o código ainda possa ser usado exatamente da mesma maneira que o original. Eu achohtons(bind_port_env ? atoi(bind_port_env) : 0)
que faria a coisa certa.Vale acrescentar que o kernel Linux também tem
net.ipv4.ip_local_reserved_ports
botão que funciona de maneira oposta, mas, no entanto, pode ser muito útil, pois dessa maneira você pode "perfurar um buraco" para serviços que abrem portas específicas em uma faixa efêmera de portas.
Breve trecho dos documentos :
fonte