Telnet은 컴퓨터에 원격으로 액세스하는 데 사용되는 네트워크 프로토콜이며 양방향 텍스트 기반 통신을 제공합니다. 따라서 서로 통신하려면 텔넷 서버와 클라이언트가 필요합니다.
Telnet은 오랫동안 그 목적을 수행해 온 인기 있는 Linux/Windows 유틸리티 중 하나입니다.
최신 시스템에서 텔넷의 주요 문제는 안전하지 않다는 것입니다. 텔넷의 모든 통신은 일반 텍스트로 이루어지며 모든 네트워크 트래픽은 암호화되지 않습니다. 기본적으로 적절한 액세스 권한과 도구가 있는 사람은 네트워크 트래픽을 스누핑하여 이 트래픽을 읽을 수 있습니다. 따라서 대부분의 최신 Linux 운영 체제에는 텔넷이 사전 설치된 상태로 제공되지 않으며 다른 운영 체제에서는 텔넷 사용을 권장하지 않습니다.
텔넷의 암호화된 대체 이상인 SSH 또는 보안 셸 프로토콜의 출현으로 인해 텔넷을 의도한 목적으로 사용하는 것은 오래 전에 구식이 되었습니다. 그러나 많은 시스템 관리자와 기술 애호가가 여전히 사용하는 텔넷의 대체 용도가 있습니다. 원격 TCP 포트의 연결을 확인하는 것입니다.
telnet 명령을 사용하여 원격 TCP 포트가 제대로 수신 대기하고 응답하는지 간단히 확인할 수 있습니다. 아래 스니펫은 HTTP/HTTPS 연결을 확인하여 google.com이 작동 중인지 확인하는 방법을 보여줍니다.
$ telnet google.com 80 Trying 142.250.183.206... Connected to google.com. Escape character is '^]'. ^] telnet> quit Connection closed. $ $ telnet google.com 443 Trying 142.250.183.206... Connected to google.com. Escape character is '^]'. ^] telnet> quit Connection closed. $
열려 있지 않거나 액세스할 수 없는 TCP 포트는 텔넷으로 확인할 때 아래와 같이 동작합니다.
$ telnet google.com 22 Trying 142.250.193.174... ^C $
따라서 ping, traceroute 또는 tracepath, netstat 등의 명령과 함께 간단한 네트워크 연결 문제를 쉽게 해결할 수 있습니다.
RHEL 8(또는 이전 버전의 RHEL/CentOS)을 사용하는 경우 많은 네트워크 진단 관련 옵션을 지원하는 nc(또는 Ncat 또는 네트워크 커넥터)를 사용할 수 있습니다. RHEL8 및 이와 유사한 시스템에서 이 도구를 설치하고 사용하는 방법에 대해 논의할 것입니다.
목차
엔씨가 뭔가요?
nc(또는 Ncat)는 네트워크에서 데이터를 읽고, 쓰고, 리디렉션하고, 암호화하기 위한 널리 사용되는 범용 명령줄 도구입니다. 원래 nmap 프로젝트용으로 작성되었지만 이제 여러 Netcat 구현을 사용할 수 있습니다. IPv4 및 IPv6에서 TCP 및 UDP와 함께 작동하며 무한한 잠재적 사용 사례를 제공합니다.
다음은 nc 유틸리티의 주요 기능 중 일부입니다.
- ncats를 함께 묶는 능력
- TCP, UDP 및 SCTP 포트를 다른 사이트로 리디렉션
- SSL 지원으로 통신 암호화
- SOCK4/5 또는 HTTP 프록시를 통한 프록시 지원(인증 포함)
- Windows, Linux 및 macOS를 포함한 여러 플랫폼 지원
엔씨 설치
nc는 RHEL 시스템에서 기본 리포지토리의 일부로 사용할 수 있습니다. RHEL 7 시스템에 설치하려면 터미널에서 아래 명령을 실행하기만 하면 됩니다.
$ sudo yum install -y nc
RHEL 8 시스템의 경우 dnf를 다음과 같이 사용할 수 있습니다.
$ sudo dnf install -y nc
TCP 연결 확인
nc는 여러 응용 프로그램에서 다양한 사용 사례를 지원하는 다양한 기능을 제공하지만 일반적인 기능 중 하나는 텔넷 대신 네트워크 문제 해결 중에 사용하는 것입니다.
nc는 TCP 포트에 연결할 수 있는지 표시할 수 있습니다. 구문은 다음과 같습니다.
$ nc -vz <IP/DNS> <Port>
예를 들어 http 또는 https를 통해 koreantech.org에 연결할 수 있는지 확인하려는 경우입니다. 아래와 같이 nc를 사용하여 확인할 수 있습니다(포트 80은 http용이고 443은 https용임).
$ nc -vz koreantech.org.com 80 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 104.26.11.88:80. Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds. $ $ nc -vz koreantech.org.com 443 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 104.26.10.88:443. Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds. $
마찬가지로 연결할 수 없거나 차단된 포트는 다음과 같은 출력을 표시합니다(여러 주소는 koreantech.org DNS가 여러 IP를 가리키는 것으로 확인됨).
$ nc -vz koreantech.org.com 22 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connection to 172.67.70.213 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 104.26.11.88 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 104.26.10.88 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 2606:4700:20::681a:a58 failed: Network is unreachable. Ncat: Trying next address... Ncat: Connection to 2606:4700:20::681a:b58 failed: Network is unreachable. Ncat: Trying next address... Ncat: Network is unreachable. $ $ dig koreantech.org.com +short 104.26.10.88 172.67.70.213 104.26.11.88 $
UDP 연결 확인
telnet은 원격 TCP 포트와의 통신만 확인할 수 있는 반면 nc는 TCP 및 UDP 연결을 확인할 수 있습니다.
nc는 다음을 사용하여 기본 TCP 패킷 대신 UDP 패킷을 간단히 보낼 수 있습니다.
$ nc -vzu <IP/DNS> <Port>
그러나 UDP는 TCP와 달리 세션이 없는 프로토콜이므로 원격 쪽의 수신 프로세스가 다음을 전송하지 않는 한 한쪽 끝에서 UDP 패킷을 보내는 것만으로는 가능한 모든 시나리오에서 종단 간 UDP 연결을 확인할 수 없습니다. 일부 응답, nc는 보낸 패킷이 대상에 도달했는지 여부를 판단할 수 없습니다. 그러나 nc는 원격 서버의 CLI에 대한 적절한 액세스 권한이 있다고 가정하고 UDP 수신기를 시작하여 종단 간 UDP 연결을 결정하는 대안을 제공합니다.
따라서 nc를 사용하여 DNS에 대해 두 Linux 호스트 간의 UDP 연결을 확인해야 한다고 가정하면 이를 수행하는 간단한 방법은 필요한 포트에서 수신 대기하는 nc 서버를 시작하는 것입니다.
$ sudo nc -ul <Port>
DNS의 경우 위의 명령을 다음과 같이 만드는 포트 53을 확인해야 합니다.
$ nc -ul 53
클라이언트 측에서 UDP 패킷을 서버로 보내는 다른 nc 프로세스를 시작해야 합니다.
$ nc -u <IP/DNS> <Port>
우리의 명령은 다음과 같습니다.
$ nc -u <IP/DNS> 53
이 두 컴퓨터 사이의 포트 53에 대한 UDP 트래픽을 차단하지 않는다는 점을 고려하면 한 컴퓨터에서 입력하고 입력한 내용이 양방향 채팅과 같은 다른 호스트에서 볼 수 있어야 합니다. 그렇지 않은 경우 일부 방화벽이 이 두 시스템 간의 연결을 차단하고 있습니다.
nc를 사용하는 서버 및 클라이언트 모델은 호스트 간의 이러한 종류의 간단한 연결 확인에 완벽하게 작동합니다. 위의 UDP 검사와 마찬가지로 nc는 지정된 포트에서 TCP 패킷을 수신할 수도 있습니다.
$ sudo nc -l <Port>
클라이언트 측에서 일반적으로 TCP 패킷을 보내 연결을 확인할 수 있습니다.
$ nc <IP/DNS> <Port>
위의 서버/클라이언트 nc 방법은 UDP와 달리 TCP 연결의 경우 필요하지 않습니다. 연결 지향 프로토콜이고 승인과 함께 작동하기 때문입니다. TCP에서 작동하는 모든 수신 프로세스는 nc TCP 패킷에 직접 응답합니다.
요약
이 기사에서는 nc 유틸리티가 포트 연결을 확인하는 한 최신 Linux 시스템에서 텔넷을 직접 대체하는 방법을 요약하고 네트워크 문제를 진단하고 해결하는 데 최종 사용자에게 훨씬 더 많은 권한을 제공합니다.
nc 도움말은 nc -h 명령을 사용하여 액세스할 수 있습니다.
$ nc -h Ncat 7.70 ( https://nmap.org/ncat ) Usage: ncat [options] [hostname] [port] Options taking a time assume seconds. Append 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms). -4 Use IPv4 only -6 Use IPv6 only -U, --unixsock Use Unix domain sockets only -C, --crlf Use CRLF for EOL sequence -c, --sh-exec <command> Executes the given command via /bin/sh -e, --exec <command> Executes the given command --lua-exec <filename> Executes the given Lua script -g hop1[,hop2,...] Loose source routing hop points (8 max) -G <n> Loose source routing hop pointer (4, 8, 12, ...) -m, --max-conns <n> Maximum <n> simultaneous connections -h, --help Display this help screen -d, --delay <time> Wait between read/writes -o, --output <filename> Dump session data to a file -x, --hex-dump <filename> Dump session data as hex to a file -i, --idle-timeout <time> Idle read/write timeout -p, --source-port port Specify source port to use -s, --source addr Specify source address to use (doesn't affect -l) -l, --listen Bind and listen for incoming connections -k, --keep-open Accept multiple connections in listen mode -n, --nodns Do not resolve hostnames via DNS -t, --telnet Answer Telnet negotiations -u, --udp Use UDP instead of default TCP --sctp Use SCTP instead of default TCP -v, --verbose Set verbosity level (can be used several times) -w, --wait <time> Connect timeout -z Zero-I/O mode, report connection status only --append-output Append rather than clobber specified output files --send-only Only send data, ignoring received; quit on EOF --recv-only Only receive data, never send anything --allow Allow only given hosts to connect to Ncat --allowfile A file of hosts allowed to connect to Ncat --deny Deny given hosts from connecting to Ncat --denyfile A file of hosts denied from connecting to Ncat --broker Enable Ncat's connection brokering mode --chat Start a simple Ncat chat server --proxy <addr[:port]> Specify address of host to proxy through --proxy-type <type> Specify proxy type ("http" or "socks4" or "socks5") --proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server --ssl Connect or listen with SSL --ssl-cert Specify SSL certificate file (PEM) for listening --ssl-key Specify SSL private key (PEM) for listening --ssl-verify Verify trust and domain name of certificates --ssl-trustfile PEM file containing trusted SSL certificates --ssl-ciphers Cipherlist containing SSL ciphers to use --ssl-alpn ALPN protocol list to use. --version Display Ncat's version information and exit See the ncat(1) manpage for full options, descriptions and usage examples $
nc 명령어에 대한 자세한 내용은 해당 매뉴얼 페이지를 참조하십시오.
$ man nc