nc -v 명령을 실행할 때 포트 2628에서 dictd 서비스를 실행하는 로컬로 실행되는 가상 머신에 텔넷으로 연결하려고 합니다. 하지만 다음과 같은 결과가 나타납니다.
$ nc -v localhost 2628
nc: connectx to localhost port 2628 (tcp) failed: Connection refused
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif lo0
src 127.0.0.1 port 63929
dst 127.0.0.1 port 2628
rank info not available
TCP aux info available
Connection to localhost port 2628 [tcp/dict] succeeded!
연결이 거부되었다가 성공적으로 연결되는 이유는 무엇입니까? 이것이 의미하는 바는 무엇이며 다음과 같은 경우 내 연결을 수락하지 않는 이유는 무엇입니까 telnet localhost 2628
?
답변1
사용 가능한 netcat 버전은 수십 가지가 있지만 그 이유는 다음과 같습니다.
localhost
에 2개의 항목이 있습니다/etc/hosts
. 하나는 IPv4용이고 다른 하나는 IPv6용입니다.- 데몬은 하나의 프로토콜(아마도 IPv4)만 수신합니다.
- 클라이언트는 먼저 데몬이 수신 대기하지 않는 프로토콜을 통해 연결한 다음 데몬이 사용 중인 프로토콜을 시도합니다.
예를 들어:
$ grep localhost /etc/hosts
127.0.0.1 localhost
::1 localhost
$ nc -4 -l -p 9000 -s 127.0.0.1
nc: listening on 127.0.0.1 9000 ...
$ nc localhost 9000
nc: cannot connect to localhost (::1) 9000 [9000]: Connection refused
nc: localhost (127.0.0.1) 9000 [9000] open
nc: using stream socket