Was können die Gründe für Verbindungsfehler sein?


113

Ich versuche, ein Serverprogramm in C mit einem anderen Client zu schreiben. Diese Fehlermeldung wird angezeigt, wenn ich beispielsweise versuche, eine Verbindung über Port 2080 herzustellen.

connection refused

Was können die Gründe für diesen Fehler sein?


Ich habe gerade diesen Fehler aufgrund eines Fehlers des Servers erhalten, auf dem ich meine Website hoste. Der Server konnte noch bearbeitet werden ping, downforeveryoneorjustme.com zeigte, dass es nicht nur ich bin und ich auch weiterhin über FTP darauf zugreifen konnte. Nach ein paar Minuten waren die Fehler behoben.
Martin Thoma

2
@moose: ping sagt Ihnen nicht, ob auf einen bestimmten Port zugegriffen werden kann, sondern nur, ob die IP-Adresse erreichbar ist. Dies connect()hängt jedoch davon ab, ob eine bestimmte IP-Adresse und ein bestimmter Port einsatzbereit sind.
Remy Lebeau

Serverfehler hat eine kanonische Frage zu Verbindung abgelehnt .
Raedwald

Hier ist eine kurze Erklärung der Verbindung abgelehnt .
Rbinnun

Ich habe eine Verbindung unter Ubuntu abgelehnt bekommen, weil ich versucht habe, eine Verbindung auf 'localhost' zu erhalten, aber 'localhost' auf meinem Computer nicht richtig konfiguriert war. Das Ändern von 'localhost' in '' (Python) löste das Problem.
user1097111

Antworten:


93

Es kann viele Gründe geben, aber die häufigsten sind:

  1. Der Port ist auf dem Zielcomputer nicht geöffnet.

  2. Der Port ist auf dem Zielcomputer geöffnet, aber der Rückstand an ausstehenden Verbindungen ist voll.

  3. Eine Firewall zwischen Client und Server blockiert den Zugriff (überprüfen Sie auch die lokalen Firewalls).

Nachdem Sie nach Firewalls gesucht haben und der Port geöffnet ist, stellen Sie mit Telnet eine Verbindung zur IP / zum Port her, um die Konnektivität zu testen. Dadurch werden potenzielle Probleme aus Ihrer Anwendung entfernt.


7
Firewalls geben normalerweise Timeout-Fehler aus, da das Verbindungspaket (SYN) nur verworfen wird. Die Verbindung wurde abgelehnt, weil der Server das SYN-Paket empfangen und abgelehnt hat.
RedPandaCurios

15
Nicht immer, da Firewalls so konfiguriert werden können, dass Pakete abgelehnt und nicht verworfen werden.
Am

connect () mit falscher Konfiguration der Server-IP-Adresse und Portnummer im Client-Programm führt ebenfalls zu Fehler Nr. 111.
smRaj

Außerdem: Wenn Sie auf https zugreifen müssen, aber http: // ... angegeben haben, kann dieser Fehler ebenfalls auftreten.
Fico

4
@ a'r Woher wissen Sie den Status des Rückstands?
Naveen Verma

75

Der Fehler bedeutet, dass das Betriebssystem des Listening-Sockets die eingehende Verbindungsanforderung erkannt, diese jedoch absichtlich abgelehnt hat.

Angenommen, eine Zwischenfirewall stört nicht, gibt es nur zwei (mir bekannte) Gründe für das Betriebssystem, eine eingehende Verbindungsanforderung abzulehnen. Ein Grund wurde bereits mehrfach erwähnt: Der angeschlossene Listening-Port ist nicht geöffnet.

Es gibt einen weiteren Grund, der noch nicht erwähnt wurde: Der Überwachungsport ist tatsächlich geöffnet und wird aktiv verwendet, aber sein Rückstand an eingehenden Verbindungsanforderungen in der Warteschlange hat sein Maximum erreicht, sodass kein Platz für die eingehende Verbindungsanforderung verfügbar ist Moment. Der Servercode hat accept () noch nicht oft genug aufgerufen, um die verfügbaren Slots für neue Warteschlangenelemente zu löschen.

Warten Sie einen Moment oder versuchen Sie es erneut. Leider gibt es keine Möglichkeit, zwischen "Der Port ist überhaupt nicht geöffnet" und "Der Port ist offen, aber gerade zu beschäftigt" zu unterscheiden. Beide verwenden denselben generischen Fehlercode.


4
Es gibt auch einen Randfall, wie hier erläutert: softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/… . Wenn Sie Ihre Client / Server-App einem Stresstest unterziehen und den in 3.6 genannten naiven Ansatz verwenden, kann im Grunde ein Fehler "Verbindung abgelehnt" auftreten, der sich von den beiden oben genannten Fällen unterscheidet.
ernesto

Dies muss positiv bewertet werden. Sobald die offensichtliche Ursache (nichts Zuhören) behoben wurde, ist dies tatsächlich die wahrscheinlichste Erklärung, und die Behebung kann eine komplexe Angelegenheit sein.
Graham Nicholls

Wie können wir das beheben, wenn der Rückstand eingehender Anfragen in der Warteschlange maximal ist?
ACarter

Wird ein Rückstand von IP in die Warteschlange gestellt? Ich habe versucht, Telnet email-smtp.eu-west-1.amazonaws.com 25 von einer EC2-Instanz und meinem lokalen Computer zu verwenden. Der Telnet-Aufruf der EC2-Instanz gibt eine verweigerte Verbindung, während sie von meinem lokalen Computer aus funktioniert
dresh

"Nichts hört zu" wird wahrscheinlich dadurch verursacht, dass der Computer aktiv ist, aber der Server (Software), z. B. Apache, nicht ausgeführt wird.
ttulinsky

24

Wenn Sie versuchen, eine TCP-Verbindung zu einem anderen Host herzustellen, und der Fehler "Verbindung abgelehnt" angezeigt wird, bedeutet dies Folgendes

  1. Sie haben ein TCP-SYN-Paket an den anderen Host gesendet.
  2. Dann haben Sie als Antwort ein TCP-RST-Paket erhalten.

RST ist ein Bit im TCP-Paket, das angibt, dass die Verbindung zurückgesetzt werden soll. Normalerweise bedeutet dies, dass der andere Host Ihren Verbindungsversuch erhalten hat und Ihre TCP-Verbindung aktiv ablehnt. Manchmal blockiert jedoch eine dazwischenliegende Firewall Ihr TCP-SYN-Paket und sendet eine TCP-RST an Sie zurück.

Siehe https://tools.ietf.org/html/rfc793 Seite 69:

SYN-EMPFANGENER STAAT

Wenn das RST-Bit gesetzt ist

Wenn diese Verbindung mit einem passiven OPEN initiiert wurde (dh aus dem LISTEN-Status stammt), setzen Sie diese Verbindung in den LISTEN-Status zurück und kehren Sie zurück. Der Benutzer muss nicht informiert werden. Wenn diese Verbindung mit einem aktiven OPEN initiiert wurde (dh aus dem SYN-SENT-Status kam), wurde die Verbindung abgelehnt, signalisieren Sie dem Benutzer "Verbindung abgelehnt". In beiden Fällen sollten alle Segmente in der Warteschlange für die erneute Übertragung entfernt werden. Geben Sie im aktiven OPEN-Fall den Status CLOSED ein, löschen Sie den TCB und kehren Sie zurück.


11

Verbindung abgelehnt bedeutet, dass der Port, zu dem Sie eine Verbindung herstellen möchten, nicht geöffnet ist.

Entweder stellen Sie eine Verbindung zur falschen IP-Adresse oder zum falschen Port her, oder der Server überwacht den falschen Port oder wird nicht ausgeführt.

Ein häufiger Fehler besteht darin, die Portnummer beim Binden oder Verbinden in der Reihenfolge der Netzwerkbytes nicht anzugeben ...


4
Dies ist nur eine von mehreren möglichen Bedingungen, die den Fehler verursachen können.
Remy Lebeau

1
Der Port könnte offen sein, aber dieser Fehler könnte immer noch auftreten.
IgorGanapolsky

6

Überprüfen Sie auf der Serverseite, ob der Port 2080 überwacht wird. Versuchen Sie zunächst, ihn auf dem Server zu bestätigen, indem Sie Telnet an diesen Port senden:

Telnet Localhost 2080

Wenn es zuhört, kann es reagieren.


3

1.Überprüfen Sie Ihren Serverstatus.

2.Überprüfen Sie den Portstatus.

Zum Beispiel 3306 netstat -nupl|grep 3306.

3.Überprüfen Sie Ihre Firewalls. Fügen Sie zum Beispiel 3306 hinzu

vim /etc/sysconfig/iptables
# add
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

netstat -a half
Philip

1

Obwohl dies in Ihrer Situation nicht der Fall zu sein scheint, kann ein Fehler bei der Verbindungsverweigerung manchmal auch darauf hinweisen, dass in Ihrem Netzwerk ein IP-Adresskonflikt vorliegt. Sie können nach möglichen IP-Konflikten suchen, indem Sie Folgendes ausführen:

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

und

arping <ipaddress>

Diese AskUbuntu-Frage enthält auch einige weitere Informationen.


0

Vom Standpunkt einer Checkpoint-Firewall aus wird eine Meldung von der Firewall angezeigt, wenn Sie tatsächlich als Aktion ablehnen auswählen, wodurch einem potenziellen Angreifer das Vorhandensein einer Firewall vor dem Server angezeigt wird. Die Firewall trennt stillschweigend alle Verbindungen, die nicht der Richtlinie entsprechen. Die verweigerte Verbindung kommt fast immer vom Server


0

Ich habe das gleiche Problem mit meinem Arbeitscomputer. Das Problem ist, dass wenn Sie localhost eingeben, es an die Adresse des Proxys und nicht an die lokale Adresse geht, Sie diese umgehen sollten. Befolgen Sie diese Schritte

Chrome => Einstellungen => Proxy-Einstellungen ändern => LAN-Einstellungen => Proxy-Server auf lokale Adressen umgehen.


0

Versuchen Sie sudo ufw allow <port_number> in Ubuntu, den Firewall-Zugriff sowohl auf Ihren Server als auch auf Ihre Datenbank zuzulassen.


0

Versuchen Sie, den Portparameter "-p" zu übergeben:

sudo iperf -c 127.0.0.1 -p 443

0

In meinem Fall passiert es, wenn die Site in meinem Land blockiert ist und ich kein VPN verwende. Zum Beispiel, wenn ich versuche, von Indonesien aus auf vimeo.com zuzugreifen, das blockiert ist.


-1

Ich hatte die gleiche Nachricht mit einer ganz anderen Ursache: Die wsock32.dllwurde nicht gefunden. Der ::socket(PF_INET, SOCK_STREAM, 0);Anruf gab immer wieder zurück, INVALID_SOCKETaber der Grund war, dass die Winsock-DLL nicht geladen wurde.

Am Ende habe ich den Prozessmonitor von Sysinternals gestartet und festgestellt, dass er "überall" nach der DLL gesucht hat, diese aber nicht gefunden hat.

Stille Fehler sind großartig!


1
INVALID_SOCKET hat nichts mit 'Verbindung abgelehnt' zu tun. "Stille Fehler" können nur auftreten, wenn in Ihrem Code die erforderliche Fehlerbehandlung fehlt.
Marquis von Lorne

1
Du meinst, ich hätte überprüfen sollen, ob die DLL geladen wurde? Du hast vermutlich recht.
xtofl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.