Які можуть бути причини, коли підключення відхилено помилки?


114

Я намагаюся написати серверну програму на C, використовуючи інший клієнт, я отримую цю помилку, коли намагаюся, наприклад, підключитися через порт 2080.

connection refused

Які можуть бути причини цієї помилки?


Я щойно отримав цю помилку через помилку сервера, на якому розміщую свій веб-сайт. Сервер все ще можна pingредагувати, downforeveryoneorjustme.com показав, що це не тільки я, і я все ще можу отримати доступ до нього через FTP. Через пару хвилин помилки були вирішені.
Мартін Тома

2
@moose: ping не повідомляє про те, чи доступний певний порт для прослуховування реклами, лише чи доступна IP-адреса. Але це connect()залежить від конкретного IP-адреси та порту, готового до використання.
Ремі Лебо

Помилка сервера має канонічне питання про відмову від підключення .
Raedwald

Ось стисле пояснення з’єднання відмовлено .
rbinnun

Мені відмовили в Ubuntu підключення, оскільки я намагався отримати з'єднання на "localhost", але "localhost" не був правильно налаштований на моїй машині. Зміна "localhost" на "" (Python) вирішила проблему.
користувач1097111

Відповіді:


93

Причин може бути багато, але найпоширенішими є:

  1. Порт не відкритий на машині призначення.

  2. Порт відкритий на машині призначення, але його відставання в очікуванні з'єднань заповнене.

  3. Брандмауер між клієнтом і сервером блокує доступ (також перевіряйте локальний брандмауер).

Перевіривши наявність брандмауерів та чи відкритий порт, використовуйте telnet для підключення до ip / порта для перевірки підключення. Це видаляє будь-які потенційні проблеми з вашої програми.


7
Брандмауери зазвичай дають помилки в режимі очікування, оскільки пакет підключення (SYN) просто відкидається. Підключення відмовлено через те, що сервер отримав та відхилив пакет SYN.
RedPandaCurios

15
Не завжди, оскільки брандмауери можуть бути налаштовані на відхилення, а не скидання пакетів.
a'r

Підключення () з неправильною IP-адресою сервера та конфігурацією номера порту в клієнтській програмі також призведе до
помилки

Крім того: коли вам потрібно отримати доступ до https, але ви вказали http: // ..., ця помилка також може статися.
Фіко

4
@ a'r Як би ви дізналися про стан відставання?
Naveen Verma

75

Помилка означає, що ОС слухаючого сокета розпізнала запит вхідного з'єднання, але вирішила навмисно його відхилити.

Якщо припустити, що проміжний брандмауер не заважає, ОС має лише дві причини (про які я знаю) для відхилення запиту на вхідне з'єднання. Про одну з причин уже згадувалося кілька разів - порт підключення до прослуховування не відкритий.

Існує ще одна причина, про яку ще не було сказано - порт прослуховування насправді відкритий і активно використовується, але його відставання у запитах на вхідне з'єднання в черзі досягло свого максимуму, тому для цього немає місця для запиту вхідного з'єднання. мить. Код сервера ще не закликав accept () ще раз, щоб закінчити очищення доступних слотів для нових елементів черги.

Зачекайте мить або спробуйте ще раз. На жаль, не існує можливості розмежувати "порт зовсім не відкритий" і "порт відкритий, але зараз занадто зайнятий". Вони обидва використовують один і той же загальний код помилки.


4
Тут також є один крайній випадок, як пояснено тут: softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/… . в основному, якщо ви проводите стрес-тестування свого клієнтського / серверного додатка, і ви використовуєте наївний підхід, як зазначено в 3.6, може статися помилка "відмовлено в зв’язку", і це справа в інших випадках.
ernesto

Це потрібно підтримати. Після того, як очевидна причина (нічого не слухається) буде вирішена, то це насправді є найбільш вірогідним поясненням, і виправити це може бути складною справою.
Грем Ніколлс

якщо відставання вхідних запитів у черзі досягло максимального рівня, як це можна виправити?
ACarter

чи є відставання в черзі за IP? Я спробував використовувати telnet email-smtp.eu-west-1.amazonaws.com 25 від екземпляра EC2 і моєї локальної машини, телефонний дзвінок екземпляра EC2 дає відмову від з'єднання, а з моєї локальної машини працює
напишіть

"нічого не слухає", ймовірно, викликано запущеною машиною, але сервер (програмне забезпечення), наприклад, Apache не працює.
ttulinsky

24

Якщо ви спробуєте відкрити TCP-з'єднання до іншого хоста і побачите помилку "З'єднання відмовлено", це означає, що

  1. Ви надіслали пакет TCP SYN другому хосту.
  2. Тоді ви отримали у відповідь пакет TCP RST.

RST - трохи в пакеті TCP, який вказує на те, що з'єднання слід скинути. Зазвичай це означає, що інший хост отримав вашу спробу з'єднання і активно відмовляється від вашого TCP-з'єднання, але іноді втручається брандмауер може заблокувати ваш пакет TCP SYN і відправити назад TCP RST до вас.

Дивіться https://tools.ietf.org/html/rfc793 на сторінці 69:

ПОЛУЧАЮЧИЙ СИН

Якщо встановлено біт RST

Якщо це з'єднання було ініційовано з пасивним OPEN (тобто прийшло зі стану LISTEN), поверніть це з'єднання в стан LISTEN і поверніться. Користувача не потрібно повідомляти. Якщо це з'єднання було ініційоване з активним OPEN (тобто прийшло із стану SYN-SENT), тоді з'єднання було відмовлено, сигналізуйте користувачеві про "відмову в з'єднанні". В будь-якому випадку всі сегменти в черзі повторної передачі повинні бути видалені. А в активному випадку OPEN введіть ЗАКРИТОГО і видаліть TCB та поверніться.


11

Відмова від підключення означає, що порт, до якого ви намагаєтеся підключитися, насправді не відкритий.

Отже, або ви підключаєтесь до неправильної IP-адреси, або до неправильного порту, або сервер слухає неправильний порт, або насправді не працює.

Поширена помилка - не вказувати номер порту під час прив'язки чи підключення в порядку байтів мережі ...


4
Це лише одне з кількох можливих умов, які можуть спричинити помилку.
Ремі Лебо

1
Порт міг бути відкритим, але ця помилка все ж може виникнути.
ІгорГанапольський

6

Перевірте на сервері, що він прослуховує порт 2080. Спочатку спробуйте підтвердити це на сервері, видавши telnet на цей порт:

telnet localhost 2080

Якщо воно слухає, воно здатне реагувати.


3

1.Перевірте свій статус сервера.

2.Перевірте стан порту.

Наприклад 3306 netstat -nupl|grep 3306.

3.Перевірте брандмауери. Наприклад, додайте 3306

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

netstat -a допомогло
Філіп

1

Хоча, здається, це не так у вашій ситуації, іноді помилка, відхилена в з’єднанні, також може означати, що у вашій мережі є конфлікт ip-адреси. Ви можете шукати можливі конфлікти ip, запустивши:

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

і

arping <ipaddress>

У цьому питанні AskUbuntu також є додаткова інформація.


0

З точки зору брандмауера Checkpoint, ви побачите повідомлення з брандмауера, якщо ви дійсно вибрали «Відхилити» як дію, тим самим піддаючи можливому зловмиснику наявність брандмауера перед сервером. Брандмауер беззвучно припинить усі з'єднання, що не відповідають політиці. Відмова від підключення майже завжди надходить із сервера


0

У мене така ж проблема з робочим комп'ютером. Проблема полягає в тому, що коли ви вводите localhost, він переходить на адресу проксі, а не на локальну адресу, вам слід обійти його, дотримуючись цих кроків

Chrome => Settings => Change settings proxy => Settings LAN => перевірити обхід проксі-сервера на локальні адреси.


0

В Ubuntu спробуйте sudo ufw allow <port_number> дозволити доступ брандмауера як до вашого сервера, так і до db.



0

У моєму випадку це відбувається, коли сайт заблокований у моїй країні, і я не використовую VPN. Наприклад, коли я намагаюся отримати доступ до vimeo.com з Індонезії, який заблокований.


-1

У мене було те саме повідомлення із зовсім іншою причиною: wsock32.dllне знайдено. ::socket(PF_INET, SOCK_STREAM, 0);Виклик продовжував повертаючи , INVALID_SOCKETале причина в тому , що DLL Winsock не було завантажено.

Врешті-решт я запустив монітор процесу Sysinternals і помітив, що він шукав dll "скрізь", але не знайшов його.

Тихі невдачі чудові!


1
INVALID_SOCKET не має нічого спільного з "відмовлено у зв’язку". "Мовчазні збої" можуть статися лише в тому випадку, якщо у вашому коді відсутня необхідна обробка помилок.
Маркіз Лорн

1
ти маєш на увазі, що я повинен був перевірити, що dll завантажений? ти, мабуть, маєш рацію.
xtofl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.