programing

접속 거부 오류의 원인은 무엇입니까?

coolbiz 2022. 8. 14. 11:15
반응형

접속 거부 오류의 원인은 무엇입니까?

C에서 서버 프로그램을 작성하려고 하는데 다른 클라이언트를 사용하여 포트 2080을 통해 연결하려고 하면 이 오류가 발생합니다.

connection refused

이 에러의 원인은 무엇입니까?

여러 가지 이유가 있을 수 있지만 가장 일반적인 이유는 다음과 같습니다.

  1. 대상 시스템에서 포트가 열려 있지 않습니다.

  2. 포트가 대상 시스템에서 열려 있지만 보류 중인 연결의 백로그가 가득 찼습니다.

  3. 클라이언트와 서버 사이의 방화벽이 액세스를 차단하고 있습니다(로컬방화벽도 체크).

방화벽과 포트가 열려 있는지 확인한 후 telnet을 사용하여 IP/포트에 연결하여 연결을 테스트합니다.그러면 응용 프로그램에서 잠재적인 문제가 제거됩니다.

다른 호스트에 대한 TCP 연결을 열려고 할 때 "Connection rejected" 오류가 나타나면

  1. TCP SYN 패킷을 다른 호스트에 송신했습니다.
  2. 그 후 응답으로 TCP RST 패킷을 수신했습니다.

RST는 TCP 패킷상의 비트이며, 접속을 리셋 할 필요가 있는 것을 나타냅니다.통상, 이것은 다른 호스트가 접속 시도를 수신해, TCP 접속을 적극적으로 거부하고 있는 것을 의미합니다만, 경우에 따라서는 방화벽이 TCP SYN 패킷을 차단해, TCP RST 를 반송하는 일이 있습니다.

https://www.rfc-editor.org/rfc/rfc793 페이지69 를 참조해 주세요.

동기 수신 상태

RST 비트가 설정되어 있는 경우

이 접속이 패시브 OPEN으로 개시된 경우(즉, LISTEN 상태에서 취득된 경우), 이 접속을 LISTEN 상태로 되돌리고 되돌립니다.사용자에게 알릴 필요가 없습니다.이 접속이 액티브한 OPEN(즉, SYN-SENT 상태로부터 온 것)으로 개시되어 접속이 거부되었을 경우는, 유저에게 「접속 거부」라고 시그널 합니다.어느 경우든, 재발송신 큐의 모든 세그먼트를 삭제할 필요가 있습니다.그리고 액티브 OPEN 케이스에서는 CLOSED 상태로 들어가 TCB를 삭제한 후 복귀합니다.

이 오류는 수신 소켓의 OS가 인바운드 연결 요청을 인식했지만 의도적으로 거부하도록 선택했음을 의미합니다.

중간 방화벽이 방해가 되지 않는 경우 OS가 인바운드 연결 요청을 거부하는 이유는 두 가지뿐입니다.이미 여러 번 언급되어 있는 이유 중 하나는 접속되어 있는 리스닝 포트가 열려 있지 않다는 것입니다.

아직 언급되지 않은 다른 이유가 있습니다.리스닝 포트는 실제로 열려 있고 활발하게 사용되고 있지만 큐잉된 인바운드 연결 요청의 백로그가 최대치에 도달했기 때문에 현재 인바운드 연결 요청을 큐잉할 수 있는 공간이 없습니다.서버 코드가 아직 accept()를 호출하지 않았기 때문에 새로운 큐 항목의 사용 가능한 슬롯을 클리어할 수 없습니다.

잠시 기다렸다가 다시 연결해 보십시오.유감스럽게도 "포트는 전혀 열려 있지 않습니다"와 "포트는 열려 있지만 현재 너무 비지 상태"를 구분할 수 없습니다.둘 다 동일한 일반 오류 코드를 사용합니다.

Connection rejected는 연결하려는 포트가 실제로 열려 있지 않음을 의미합니다.

따라서 잘못된 IP 주소 또는 잘못된 포트에 접속하고 있거나 서버가 잘못된 포트로 수신하고 있거나 실제로 실행되고 있지 않습니다.

일반적인 실수는 네트워크 바이트 순서로 바인드 또는 접속할 때 포트 번호를 지정하지 않는 것입니다.

서버측에서 포토 2080 로 수신하고 있는 것을 확인합니다.먼저 해당 포트에 telnet을 발행하여 서버 머신에서 확인을 시도합니다.

telnet localhost 2080

듣고 있으면 응답할 수 있습니다.

Try Ubuntu를 합니다.sudo ufw allow <port_number>서버와 DB 모두에 대한 방화벽 액세스를 허용합니다.

1. 서버 상태를 확인합니다.

2. 포트 상태를 확인합니다.

: †: 3306netstat -nupl|grep 3306.

3. 방화벽을 확인합니다.예를 들어 3306을 추가합니다.

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

업무용 컴퓨터에서도 같은 문제가 발생합니다.문제는 localhost를 입력하면 로컬주소가 아닌 프록시의 주소로 이동하기 때문에 다음 단계를 따라야 합니다.

Chrome = > 설정 = > 프록시 설정 변경 = > LAN 설정 = > 프록시 서버의 로컬 주소 바이패스를 선택합니다.

다른 같은 .그건 '다'의 메시지입니다.wsock32.dll를 찾을 수 없습니다.::socket(PF_INET, SOCK_STREAM, 0);INVALID_SOCKETwinsock dll은 winsock dll이다.

결국 Sysinternals 프로세스 모니터를 실행했는데 dll 'everywhere'를 검색했지만 찾을 수 없었습니다.

침묵의 실패는 위대하다!

사용하시는 상황에는 해당되지 않는 것 같습니다만, 경우에 따라서는 접속 거부 에러가 네트워크상에서 IP 주소의 경합이 발생하고 있는 것을 나타내는 경우도 있습니다.다음을 실행하여 가능한 IP 충돌을 검색할 수 있습니다.

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

그리고.

arping <ipaddress>

AskUbuntu 질문에도 몇 가지 정보가 있습니다.

Checkpoint 방화벽의 관점에서 실제로 [Reject as a Action]를 선택하면 방화벽에서 메시지가 표시되며 서버 앞에 방화벽이 있음을 공격자에게 알립니다.방화벽은 정책과 일치하지 않는 모든 연결을 자동으로 삭제합니다.접속 거부는 거의 항상 서버에서 이루어집니다.

제 경우, 본국에서 사이트가 차단되어 VPN을 사용하지 않을 때 발생합니다.예를 들어 인도네시아에서 vimeo.com에 접속하려고 하면 차단됩니다.

언급URL : https://stackoverflow.com/questions/2333400/what-can-be-the-reasons-of-connection-refused-errors

반응형