J'essaie d'écrire un programme serveur en C, En utilisant un autre client, ce message d'erreur s'affiche lorsque j'essaie de me connecter via le port 2080, par exemple.
connection refused
Quelles peuvent être les raisons de cette erreur?
Il peut y avoir plusieurs raisons, mais les plus courantes sont:
Le port n'est pas ouvert sur la machine de destination.
Le port est ouvert sur la machine de destination, mais son arriéré de connexions en attente est saturé.
Un pare-feu entre le client et le serveur bloque l'accès (vérifiez également les pare-feu locaux).
Après avoir vérifié la présence de pare-feu et vérifié que le port est ouvert, utilisez telnet pour vous connecter à l'adresse IP/port afin de tester la connectivité. Cela supprime tous les problèmes potentiels de votre application.
L'erreur signifie que le système d'exploitation du socket d'écoute a reconnu la demande de connexion entrante, mais a choisi de la rejeter intentionnellement.
En supposant qu'un pare-feu intermédiaire n'interfère pas, il n'y a que deux raisons (à ma connaissance) pour lesquelles le système d'exploitation refuse une demande de connexion entrante. Une des raisons a déjà été évoquée à plusieurs reprises: le port d'écoute auquel vous êtes connecté n'est pas ouvert.
Il y a une autre raison qui n'a pas encore été mentionnée - le port d'écoute est en fait ouvert et activement utilisé, mais son arriéré de demandes de connexion entrantes en file d'attente a atteint son maximum, de sorte qu'il n'y a plus de place disponible pour la demande de connexion entrante en attente moment. Le code du serveur n'a pas appelé accept () suffisamment de fois pour terminer la suppression des emplacements disponibles pour les nouveaux éléments de la file d'attente.
Attendez un moment ou plus et essayez à nouveau la connexion. Malheureusement, il n’ya aucun moyen de faire la différence entre "le port n’est pas ouvert du tout" et "le port est ouvert mais trop occupé en ce moment". Ils utilisent tous deux le même code d'erreur générique.
Si vous essayez d'ouvrir une connexion TCP vers un autre hôte et que vous voyez l'erreur "Connexion refusée", cela signifie que
RST est un bit du paquet TCP qui indique que la connexion doit être réinitialisée. Cela signifie généralement que l'autre hôte a reçu votre tentative de connexion et refuse activement votre connexion TCP, mais parfois un pare-feu intermédiaire peut bloquer votre paquet TCP SYN et renvoyer un TCP RST à vous.
Voir https://tools.ietf.org/html/rfc793 page 69:
ÉTAT SYN-REÇU
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.
Connexion refusée signifie que le port auquel vous essayez de vous connecter n'est pas réellement ouvert.
Donc, soit vous vous connectez à la mauvaise adresse IP, soit au mauvais port, soit le serveur écoute sur le mauvais port, ou n'est pas en cours d'exécution.
Une erreur courante consiste à ne pas spécifier le numéro de port lors de la liaison ou de la connexion dans l'ordre des octets du réseau ...
Vérifiez côté serveur qu'il écoute sur le port 2080 . Essayez tout d'abord de le confirmer sur le serveur en émettant telnet sur ce port:
telnet localhost 2080
S'il écoute, il est capable de répondre.
Bien que cela ne semble pas être le cas dans votre cas, une erreur de connexion refusée peut parfois indiquer un conflit d'adresse IP sur votre réseau. Vous pouvez rechercher d'éventuels conflits IP en exécutant:
arp-scan -I eth0 -l | grep <ipaddress>
et
arping <ipaddress>
Cette AskUbuntu question a quelques informations plus aussi.
1.Vérifiez l'état de votre serveur.
2.Vérifiez l'état du port.
Par exemple 3306 netstat -nupl|grep 3306
.
3.Vérifiez vos pare-feu . Par exemple, ajoutez 3306
vim /etc/sysconfig/iptables
# add
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
Je rencontre le même problème avec mon ordinateur de travail ... Le problème est que lorsque vous entrez dans localhost, il se connecte à l'adresse du proxy et non à l'adresse locale, vous devez l'ignorer en procédant comme suit:
Chrome => Paramètres => Modifier les paramètres du proxy => Paramètres du réseau local => cocher Bypass Proxy Server pour les adresses locales.
Du point de vue du pare-feu Checkpoint, vous verrez un message du pare-feu si vous choisissez réellement Refuser en tant qu’action, exposant ainsi à un attaquant sérieux le pare-feu situé devant le serveur. Le pare-feu supprimera silencieusement toutes les connexions qui ne correspondent pas à la stratégie. La connexion refusée provient presque toujours du serveur
Dans Ubuntu, essayez Sudo ufw allow <port_number>
Pour autoriser le pare-feu à accéder à la fois à votre serveur et à votre base de données.