Quais podem ser as razões dos erros recusados de conexão?

Estou a tentar escrever um programa de servidor em C, usando outro cliente, eu recebo este erro quando tento conectar através da porta 2080, por exemplo.

connection refused
Quais podem ser as razões deste erro?

Author: ROMANIA_engineer, 2010-02-25

11 answers

Pode haver muitas razões, mas as mais comuns são:

  1. O porto não está aberto na máquina de destino.

  2. A porta está aberta na máquina de destino, mas o seu backlog de conexões pendentes está cheio.

  3. Um firewall entre o cliente e o servidor está bloqueando o acesso (também verifique firewalls locais).

Depois de verificar se há firewalls e se a porta está aberta, use o telnet para se ligar ao ip/porto para testar a conectividade. Isto remove quaisquer problemas potenciais da sua aplicação.

 62
Author: a'r, 2015-05-21 18:55:03

O erro significa que o SO do SO do soquete de escuta reconheceu o pedido de ligação de entrada, mas escolheu rejeitá-lo intencionalmente.

Assumindo que uma firewall intermédia não está a atrapalhar, só há duas razões (que eu saiba) para o sistema operacional rejeitar um pedido de ligação de entrada. Uma razão já foi mencionada várias vezes-a porta de escuta a que está ligada não está aberta.

Há outra razão que ainda não foi mencionada-a a porta de escuta está de facto aberta e activamente utilizada, mas o seu atraso de pedidos de ligação em fila de espera atingiu o seu máximo, pelo que não há espaço disponível para o pedido de ligação em fila de espera nesse momento. O código do servidor não chamou accept () tempo suficiente para terminar a limpeza dos 'slots' disponíveis para novos itens da fila.

Espera um pouco e tenta a ligação outra vez. Infelizmente, não há maneira de diferenciar entre "o porto não está aberto de todo" e"o porto está aberto, mas muito ocupado agora". Ambos usam o mesmo código de erro genérico.
 56
Author: Remy Lebeau, 2015-05-21 18:21:00

Se tentar abrir uma ligação TCP a outra máquina e ver o erro "ligação recusada", significa que

    Enviaste um pacote de SYN TCP para a outra máquina.
  1. então você recebeu um pacote TCP RST em resposta.

O primeiro é um pouco no pacote TCP, o que indica que a ligação deve ser reposta. Normalmente isso significa que o outro host recebeu a sua tentativa de conexão e está ativamente recusando a sua conexão TCP, mas às vezes uma firewall pode intervir bloqueie o seu pacote de SYN TCP e envie um RST TCP de volta para você.

Ver https://tools.ietf.org/html/rfc793 Página 69:

ESTADO RECEBIDO PELA SYN

   If the RST bit is set

     If this connection was initiated with a passive OPEN (i.e.,
     came from the LISTEN state), then return this connection to
     LISTEN state and return.  The user need not be informed.  If
     this connection was initiated with an active OPEN (i.e., came
     from SYN-SENT state) then the connection was refused, signal
     the user "connection refused".  In either case, all segments
     on the retransmission queue should be removed.  And in the
     active OPEN case, enter the CLOSED state and delete the TCB,
     and return.
 13
Author: James Brock, 2014-04-30 09:28:40

A ligação recusada significa que a porta a que está a tentar ligar não está realmente aberta.

Por isso, ou está a ligar-se ao endereço IP errado, ou ao porto errado, ou o servidor está a ouvir no Porto errado, ou não está realmente a correr.

Um erro comum não é especificar o número do porto ao ligar ou ligar-se na ordem de 'bytes' da rede...

 7
Author: RedPandaCurios, 2010-02-25 11:03:27

Verifica no lado do servidor que ele está a ouvir na porta 2080. Primeiro tente confirmá-lo na máquina do servidor, emitindo telnet para esse porto:

Telnet localhost 2080

Se está a ouvir, é capaz de responder.
 5
Author: Adil, 2010-02-25 11:36:35

Embora não pareça ser o caso da sua situação, por vezes um erro de conexão recusado também pode indicar que há um conflito de endereço ip na sua rede. Você pode procurar por possíveis conflitos ip executando:

 arp-scan -I eth0 -l | grep <ipaddress>

E

arping <ipaddress>

Esta pergunta AskUbuntu também tem mais informações.

 1
Author: SnapShot, 2017-04-13 12:22:42

1.Verifique o estado do seu servidor.

2.Verifique o estado do Porto.

Por exemplo 3306 netstat -nupl|grep 3306.

3.Verifiquem as firewalls. Por exemplo, adicionar 3306

vim /etc/sysconfig/iptables
# add
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
 1
Author: Jack Sun, 2017-03-24 04:10:57
Do ponto de vista de uma firewall Checkpoint, você verá uma mensagem da firewall se você realmente escolher rejeitar como uma ação, expondo a um atacante propetivo a presença de uma firewall na frente do servidor. O firewall vai silenciosamente largar todas as ligações que não coincidem com a Política. A ligação recusada quase sempre vem do servidor
 0
Author: Julio Nalundasan, 2012-09-29 16:20:24
Tenho o mesmo problema com o meu computador de trabalho. O problema é que quando você digitar localhost ele vai para o endereço do proxy Não endereço local você deve contorná-lo siga estes passos

Chrome = > Settings => Change proxy settings => LAN Settings = > check Bypass proxy server for local addresses.

 0
Author: İbrahim Özbölük, 2013-08-21 06:03:37

Em Ubuntu, Tenta sudo ufw allow <port_number> para permitir o acesso de firewall ao seu servidor e db.

 0
Author: rajeeva9, 2017-05-14 05:59:04
Eu tinha a mesma mensagem com uma causa totalmente diferente: o wsock32.dllnão foi encontrado. A chamada continuou retornando um {[[2]} mas a razão era que o dll winsock não estava carregado. No final, lancei o monitor de processo do Synternals e notei que ele procurava o dll 'em todo o lado', mas não o encontrei. As falhas silenciosas são grandes!
 -1
Author: xtofl, 2016-10-03 13:55:06