Каковы могут быть причины ошибок отказа в соединении?

#java #ftps

#c #сокеты #отказ в подключении

Вопрос:

Я пытаюсь написать серверную программу на C, используя другой клиент, я получаю эту ошибку, когда пытаюсь подключиться, например, через порт 2080.

 connection refused
  

Каковы могут быть причины этой ошибки?

Комментарии:

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

2. @moose: ping не сообщает вам, доступен ли конкретный порт для прослушивания рекламы, только доступен ли IP-адрес. Но connect() зависит от конкретного IP и готовности порта к использованию.

3. Ошибка сервера имеет канонический вопрос о отказе в соединении .

4. Вот краткое объяснение отказа в соединении .

5. Я получил отказ в подключении в Ubuntu, потому что я пытался получить соединение на ‘localhost’, но ‘localhost’ не был правильно настроен на моем компьютере. Изменение ‘localhost’ на » (Python) решило проблему.

Ответ №1:

Причин может быть много, но наиболее распространенными являются:

  1. Порт не открыт на компьютере назначения.

  2. Порт открыт на компьютере назначения, но его список ожидающих подключений заполнен.

  3. Брандмауэр между клиентом и сервером блокирует доступ (также проверьте локальные брандмауэры).

После проверки наличия брандмауэров и того, что порт открыт, используйте telnet для подключения к ip / порту для проверки подключения. Это устраняет любые потенциальные проблемы с вашим приложением.

Комментарии:

1. Брандмауэры обычно выдают ошибки тайм-аута, поскольку пакет connect (SYN) просто отбрасывается. Отказ в соединении вызван тем, что сервер получил и отклонил пакет SYN.

2. Не всегда, поскольку брандмауэры могут быть настроены на отклонение, а не отбрасывание пакетов.

3. подключение () с неправильной настройкой IP-адреса сервера и номера порта в клиентской программе также приведет к ошибке 111.

4. Кроме того: когда вам нужно получить доступ к https, но вы указали http:// … эта ошибка также может возникнуть.

5. @a’r Как бы вы узнали статус невыполненной работы?

Ответ №2:

Ошибка означает, что ОС прослушивающего сокета распознала запрос на входящее соединение, но решила намеренно отклонить его.

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

Есть еще одна причина, которая еще не была упомянута — порт прослушивания фактически открыт и активно используется, но его отставание от запросов на входящее соединение в очереди достигло максимума, поэтому в данный момент нет свободного места для запроса на входящее соединение в очереди. Серверный код еще не вызывал accept() достаточно раз, чтобы завершить очистку доступных слотов для новых элементов очереди.

Подождите минуту или около того и повторите попытку подключения. К сожалению, нет способа провести различие между «порт вообще не открыт» и «порт открыт, но сейчас слишком занят». Они оба используют один и тот же общий код ошибки.

Комментарии:

1. Есть также один крайний случай, как описано здесь: softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq / … . в принципе, если вы проводите стресс-тестирование своего клиент-серверного приложения и используете наивный подход, упомянутый в 3.6, может возникнуть ошибка «отказано в подключении», и она отличается от двух вышеупомянутых.

2. За это нужно проголосовать. Как только очевидная причина (ничего не прослушивается) устранена, это на самом деле наиболее вероятное объяснение, и его исправление может быть сложным делом.

3. если количество входящих запросов в очереди достигло максимума, как мы можем это исправить?

4. находится ли отставание в очереди по IP? Я попытался использовать telnet email-smtp.eu-west-1.amazonaws.com 25 из экземпляра EC2 и моего локального компьютера вызов telnet экземпляра EC2 выдает отказ в подключении, в то время как с моего локального компьютера он работает

5. «ничего не прослушивается», вероятно, вызвано тем, что компьютер включен, но сервер (программное обеспечение), например, Apache, не запущен.

Ответ №3:

Если вы пытаетесь открыть TCP-соединение с другим хостом и видите ошибку «Отказано в подключении», это означает, что

  1. Вы отправили TCP SYN-пакет на другой хост.
  2. Затем вы получили первый пакет TCP в ответ.

ПЕРВЫЙ бит в TCP-пакете, который указывает, что соединение должно быть сброшено. Обычно это означает, что другой хост получил вашу попытку подключения и активно отказывается от вашего TCP-соединения, но иногда промежуточный брандмауэр может заблокировать ваш пакет TCP SYN и отправить вам TCP RST обратно.

Смотрите https://www.rfc-editor.org/rfc/rfc793 страница 69:

SYN-ПОЛУЧЕННОЕ СОСТОЯНИЕ

Если установлен первый бит

Если это соединение было инициировано с пассивным ОТКРЫТИЕМ (т. Е. вышло из состояния ПРОСЛУШИВАНИЯ), то верните это соединение в состояние ПРОСЛУШИВАНИЯ и вернитесь. Пользователю не нужно сообщать. Если это соединение было инициировано с активным ОТКРЫТЫМ (т. Е. вышло из состояния СИНХРОНИЗАЦИИ), то соединение было отклонено, сообщите пользователю «соединение отклонено». В любом случае все сегменты в очереди повторной передачи должны быть удалены. И в активном ОТКРЫТОМ случае войдите в ЗАКРЫТОЕ состояние и удалите TCB и вернитесь.

Комментарии:

1. Отличный ответ. Это должно быть принято!

Ответ №4:

Отказ в подключении означает, что порт, к которому вы пытаетесь подключиться, фактически не открыт.

Итак, либо вы подключаетесь к неправильному IP-адресу, либо к неправильному порту, либо сервер прослушивает неправильный порт, либо фактически не запущен.

Распространенной ошибкой является не указание номера порта при привязке или подключении в сетевом порядке байтов…

Комментарии:

1. Это всего лишь одно из нескольких возможных условий, которые могут вызвать ошибку.

2. Порт может быть открыт, но эта ошибка все еще может возникнуть.

3. Сервер фактически не запущен — это очень распространенный сценарий в средах разработки, где команды уделяют больше внимания производственным серверам.

Ответ №5:

Проверьте на стороне сервера, что он прослушивает порт 2080. Сначала попробуйте подтвердить это на серверной машине, отправив telnet на этот порт:

telnet localhost 2080

Если он прослушивает, он может ответить.

Ответ №6:

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
  

Комментарии:

1. netstat -a помог

Ответ №7:

Хотя, похоже, это не относится к вашей ситуации, иногда ошибка отказа в подключении может также указывать на конфликт ip-адресов в вашей сети. Вы можете выполнить поиск возможных конфликтов ip, выполнив:

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

и

 arping <ipaddress>
  

Этот вопрос AskUbuntu также содержит дополнительную информацию.

Ответ №8:

Я получаю ту же проблему с моим рабочим компьютером. Проблема в том, что когда вы вводите localhost, он переходит на адрес прокси, а не на локальный адрес, который вы должны обойти, выполните следующие действия

Chrome => Настройки => Изменить настройки прокси => Настройки локальной сети => проверить прокси-сервер обхода локальных адресов.

Комментарии:

1. Это меня исправило. Но в моей версии Chrome это было вызвано «Откройте настройки прокси вашего компьютера», которые открыли настройки моего прокси macOS. Оттуда я добавил подстановочный знак для используемого мной ДВУ (*.test) для своих локальных адресов в разделе «Настройки обхода прокси для хостов и доменов»

Ответ №9:

В Ubuntu попробуйте sudo ufw allow <port_number> разрешить брандмауэру доступ как к вашему серверу, так и к БД.

Ответ №10:

С точки зрения брандмауэра контрольной точки, вы увидите сообщение от брандмауэра, если вы действительно выберете Отклонить в качестве действия, тем самым раскрывая предполагаемому злоумышленнику наличие брандмауэра перед сервером. Брандмауэр автоматически удалит все подключения, которые не соответствуют политике. Отказ в соединении почти всегда происходит с сервера

Ответ №11:

В моем случае это происходит, когда сайт заблокирован в моей стране, и я не использую VPN. Например, когда я пытаюсь получить доступ vimeo.com из Индонезии, которая заблокирована.

Ответ №12:

  • Проверьте, bind подключено ли ваше приложение к порту, на который вы отправляете запрос
  • Проверьте, принимает ли приложение соединения с хоста, на который вы отправляете запрос, возможно, вы забыли разрешить все входящие соединения 0.0.0.0 и по умолчанию разрешены только соединения с 127.0.0.1

Ответ №13:

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

В конце я запустил process monitor от Sysinternals и заметил, что он искал dll «везде», но не нашел ее.

Тихие сбои — это здорово!

Комментарии:

1. INVALID_SOCKET не имеет ничего общего с ‘отказано в соединении’. «Тихие сбои» могут возникать только в том случае, если в вашем коде отсутствует требуемая обработка ошибок.

2. вы имеете в виду, что я должен был проверить, загружена ли библиотека DLL? вероятно, вы правы.