Bağlantı reddedilen hataların nedenleri ne olabilir?


114

C'de bir sunucu programı yazmaya çalışıyorum, başka bir istemci kullanarak, bu hatayı örneğin 2080 portu üzerinden bağlanmaya çalıştığımda alıyorum.

connection refused

Bu hatanın nedenleri ne olabilir?


Web sitemi barındırdığım sunucunun bir hatası nedeniyle bu hatayı aldım. Sunucu hala kurulabilirdi ping, downforeveryoneorjustme.com sadece ben olmadığımı ve yine de FTP üzerinden erişebileceğimi gösterdi. Birkaç dakika sonra hatalar çözüldü.
Martin Thoma

2
@moose: ping, belirli bir bağlantı noktasının erişilebilir olup olmadığını ve yalnızca IP adresinin erişilebilir olup olmadığını söyler. Ancak connect()belirli bir IP ve bağlantı noktasının kullanıma hazır olmasına bağlıdır.
Remy Lebeau

Sunucu Hatası, Bağlantı Reddedildi ile ilgili kurallı bir soruyu içeriyor .
Raedwald

İşte Bağlantı Reddedildi'nin kısa ve öz bir açıklaması .
rbinnun

Ubuntu'da reddedilen bir bağlantı var çünkü 'localhost'ta bağlantı almaya çalışıyordum, ancak' localhost 'makinemde doğru şekilde yapılandırılmamıştı. 'Localhost'u' '(Python) olarak değiştirmek sorunu çözdü.
user1097111

Yanıtlar:


93

Bunun birçok nedeni olabilir, ancak en yaygın olanları:

  1. Bağlantı noktası, hedef makinede açık değil.

  2. Bağlantı noktası hedef makinede açık, ancak bekleyen bağlantıların biriktirme listesi dolu.

  3. İstemci ve sunucu arasındaki bir güvenlik duvarı erişimi engelliyor (ayrıca yerel güvenlik duvarlarını kontrol edin).

Güvenlik duvarlarını ve bağlantı noktasının açık olduğunu kontrol ettikten sonra, bağlantıyı test etmek için ip / bağlantı noktasına bağlanmak için telnet kullanın. Bu, uygulamanızdaki olası sorunları ortadan kaldırır.


7
Bağlantı (SYN) paketi atıldığından, güvenlik duvarları normalde zaman aşımı hataları verir. Bağlantı reddedildi çünkü sunucunun SYN paketini alması ve reddetmesi.
RedPandaCurios

15
Her zaman değil, çünkü güvenlik duvarları paketleri düşürmek yerine reddedecek şekilde yapılandırılabilir.
05'te a'r

istemci programında yanlış Sunucu IP adresi ve bağlantı noktası numarası yapılandırması ile connect () de hata 111'e neden olacaktır.
smRaj

Ek olarak: https'ye erişmeniz gerektiğinde, ancak http: // ... belirlediğinizde bu hata da ortaya çıkabilir.
Fico

4
@ a'r İş yığınının durumunu nasıl anlarsınız?
Naveen Verma

75

Hata, dinleme soketinin işletim sisteminin gelen bağlantı talebini tanıdığı, ancak kasıtlı olarak reddetmeyi seçtiği anlamına gelir.

Bir ara güvenlik duvarının engel teşkil etmediğini varsayarsak, işletim sisteminin gelen bağlantı talebini reddetmesinin (bildiğim kadarıyla) yalnızca iki nedeni vardır. Bunun bir nedeni daha önce defalarca belirtilmişti - bağlanılan dinleme bağlantı noktası açık değil.

Henüz bahsedilmeyen başka bir neden daha var - dinleme bağlantı noktası aslında açık ve aktif olarak kullanılıyor, ancak sıraya alınmış gelen bağlantı isteklerinin biriktirme listesi maksimuma ulaştı, bu nedenle gelen bağlantı isteğinin bu sırada sıraya alınması için yer yok an. Sunucu kodu, yeni kuyruk öğeleri için kullanılabilir yuvaları temizlemeyi bitirmek için henüz accept () öğesini çağırmadı.

Bir dakika kadar bekleyin ve bağlantıyı yeniden deneyin. Ne yazık ki, "bağlantı noktası hiç açık değil" ile "bağlantı noktası açık ancak şu anda çok meşgul" arasında ayrım yapmanın bir yolu yok. İkisi de aynı genel hata kodunu kullanır.


4
Burada açıklandığı gibi bir uç durum da vardır: softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/… . temel olarak, istemci / sunucu uygulamanızı stres testi yapıyorsanız ve 3.6'da belirtildiği gibi saf yaklaşımı kullanıyorsanız, "bağlantı reddedildi" hatası olabilir ve bu, yukarıdaki ikisinden farklı bir durumdur.
ernesto

Bunun olumlu oylanması gerekiyor. Bariz neden (hiçbir şey dinlemez) çözüldükten sonra, bu aslında en olası açıklamadır ve düzeltmek karmaşık bir konu olabilir.
Graham Nicholls

Kuyruğa alınmış gelen isteklerin birikimi maksimuma ulaştıysa, bunu nasıl düzeltebiliriz?
ACarter

IP tarafından sıraya alınmış bir biriktirme listesi mi? Bir EC2 bulut sunucusundan ve yerel makinemden telnet email-smtp.eu-west-1.amazonaws.com 25 kullanmayı denedim, EC2 bulut sunucusu telnet çağrısı yerel
makinemden

"hiçbir şey dinlemiyor", muhtemelen makinenin açık olmasından kaynaklanmaktadır, ancak sunucu (yazılım), örneğin Apache çalışmıyor.
ttulinsky

24

Başka bir ana bilgisayara TCP bağlantısı açmaya çalışırsanız ve "Bağlantı reddedildi" hatasını görürseniz,

  1. Diğer ana bilgisayara bir TCP SYN paketi gönderdiniz.
  2. Ardından yanıt olarak bir TCP RST paketi aldınız.

RST, TCP paketinde bağlantının sıfırlanması gerektiğini belirten bir bittir. Genellikle bu, diğer ana bilgisayarın bağlantı girişiminizi aldığı ve TCP bağlantınızı aktif olarak reddettiği anlamına gelir, ancak bazen araya giren bir güvenlik duvarı TCP SYN paketinizi engelleyebilir ve size bir TCP RST gönderebilir.

Bkz. Https://tools.ietf.org/html/rfc793 sayfa 69:

SYN-ALINAN DEVLET

RST biti ayarlanmışsa

Bu bağlantı pasif bir AÇIK ile başlatılmışsa (yani, DİNLEME durumundan gelmişse), bu bağlantıyı DİNLEME durumuna döndürün ve geri dönün. Kullanıcının bilgilendirilmesine gerek yoktur. Bu bağlantı etkin bir AÇIK ile başlatıldıysa (yani, SYN-SENT durumundan geldiyse), bağlantı reddedildi, kullanıcıya "bağlantı reddedildi" sinyali verin. Her iki durumda da, yeniden iletim kuyruğundaki tüm segmentler kaldırılmalıdır. Ve aktif AÇIK durumda, KAPALI durumuna girin ve TCB'yi silin ve geri dönün.


11

Bağlantı reddedildi, bağlanmaya çalıştığınız bağlantı noktasının gerçekte açık olmadığı anlamına gelir.

Yani ya yanlış IP adresine ya da yanlış bağlantı noktasına bağlanıyorsunuz ya da sunucu yanlış bağlantı noktasını dinliyor ya da gerçekte çalışmıyor.

Ağ bayt sırasına bağlanırken veya bağlanırken bağlantı noktası numarasının belirtilmemesi yaygın bir hata ...


4
Bu, hataya neden olabilecek birkaç olası koşuldan yalnızca biridir.
Remy Lebeau

1
Bağlantı noktası açık olabilir, ancak bu hata yine de ortaya çıkabilir.
IgorGanapolsky

6

Sunucu tarafında, 2080 numaralı bağlantı noktasında dinlediğini kontrol edin. Önce, bu bağlantı noktasına telnet göndererek sunucu makinesinde doğrulamayı deneyin:

telnet localhost 2080

Dinliyorsa cevap verebilir.


3

1. Sunucu durumunuzu kontrol edin.

2. Bağlantı noktası durumunu kontrol edin.

Örneğin 3306 netstat -nupl|grep 3306.

3. Güvenlik duvarlarınızı kontrol edin. Örneğin 3306 ekleyin

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

netstat -a yardım etti
Philip

1

Durumunuz için durum böyle görünmese de, bazen bir bağlantı reddedildi hatası, ağınızda bir ip adresi çakışması olduğunu da gösterebilir. Aşağıdakileri çalıştırarak olası ip çakışmalarını arayabilirsiniz:

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

ve

arping <ipaddress>

Bu AskUbuntu sorusu biraz daha fazla bilgi içeriyor.


0

Bir Kontrol Noktası güvenlik duvarı açısından, bir Eylem olarak Reddet'i seçerseniz ve böylece olası bir saldırgana sunucunun önünde bir güvenlik duvarının varlığını açıklarsanız, güvenlik duvarından bir mesaj görürsünüz. Güvenlik duvarı, politikaya uymayan tüm bağlantıları sessizce kesecektir. Bağlantı reddedildi neredeyse her zaman sunucudan geliyor


0

İş bilgisayarımda da aynı sorunu yaşıyorum. Sorun şu ki, localhost'a girdiğinizde, proxy'nin adresine değil yerel adrese gidiyor, bu adımları atlamalısınız.

Chrome => Ayarlar => Proxy ayarlarını değiştir => LAN Ayarları => Yerel adresler için proxy sunucusunu atla seçeneğini işaretleyin.


0

Ubuntu'da, sudo ufw allow <port_number> hem sunucunuza hem de db'ye güvenlik duvarı erişimine izin vermeyi deneyin .



0

Benim durumumda, site ülkemde engellendiğinde ve VPN kullanmadığımda oluyor. Örneğin vimeo.com'a Endonezya'dan erişmeye çalıştığımda engellendi.


-1

Aynı mesajı tamamen farklı bir nedenle aldım: wsock32.dllbulunamadı. ::socket(PF_INET, SOCK_STREAM, 0);Çağrısı dönen tuttu INVALID_SOCKETama nedeni winsock dll yüklenmez olmasıydı.

Sonunda Sysinternals'ın işlem izleyicisini başlattım ve 'her yerde' dll'yi aradığını ancak bulamadığını fark ettim.

Sessiz başarısızlıklar harika!


1
INVALID_SOCKET'in 'bağlantı reddedildi' ile ilgisi yok. 'Sessiz arızalar' yalnızca kodunuzda gerekli hata işlemenin eksik olması durumunda ortaya çıkabilir.
Marquis of Lorne

1
Dll'nin yüklendiğini kontrol etmem gerektiğini mi söylüyorsun? muhtemelen haklısın.
xtofl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.